gpt4 book ai didi

c - 应用于字符串数组指针的逻辑

转载 作者:太空狗 更新时间:2023-10-29 15:50:21 25 4
gpt4 key购买 nike

我最近在面试过程中遇到了这个问题。我需要一些帮助来理解这个程序的第二个输出背后的逻辑。

#include <stdio.h>

char *c[] = {"GeksQuiz", "MCQ", "TEST", "QUIZ"};
char **cp[] = {c+3, c+2, c+1, c};
char ***cpp = cp;

int main()
{
printf("%s ", **++cpp); //1st statement
printf("%s ", *--*++cpp+3); //2nd statement
printf("%s ", *cpp[-2]+3); //3rd statement
printf("%s ", cpp[-1][-1]+1); //4th statement
return 0;
}

输出:- TEST sQuiz Z CQ

我从上面的代码中了解到:

为了简单起见,我们可以将 cp[] 视为 {QUIZ TEST MCQ GeksQuiz}
第一条声明:
**++cpp -> cpp 将指向 TEST 的基地址并将其解引用 2 次得到 TEST这很好。

但是在第二个陈述中我无法揭开逻辑的神秘面纱:
*--*++cpp+3 -> ++cpp 指向MCQ *++cpp 会是 M 的地址,--*++cpp 将是 M 的先前地址,现在我被困在这里。它如何将 sQuiz 作为输出?
(afaik++(后缀)和 * 具有相同的优先级和从右到左的结合性)

(免责声明:请开阔思路,并非所有代码都是为了产品开发,本代码评估对C指针的理解)

最佳答案

在第一个 printf 之后,cpp 指向 c+2

                 CP
+------+
| |
0 | C+3 +----------------------------------------------------------------+
| | |
| | |
+------+ |
| | |
1 | C+2 +-------------------------------------------------+ |
CPP --------> | | | |
| | | |
+------+ | |
| +---------------------------------------+ | |
2 | C+1 | | | |
| | | | |
| | | | |
+------+ | | |
| +-----------------------+ | | |
3 | C | v v v v
| |
| | +-------------+------------+-----------+------------+
+------+ C | "GeksQuiz" | "MCQ" | "TEST" | "QUIZ" |
| | | | |
+-------------+------------+-----------+------------+
0 1 2 3

在第二个printf中,++cppcpp增加到c+1
*++cpp 将取消引用 cpp 并给出 c+1
-- 会将 c+1 递减 1 因此,*--*++cpp 最终会给出 c.
c+3 将指向 "GeksQuiz" 的第 4 个字符,即 s
请注意,在第二个 printf 之后,cpp 将指向 cp[0],它现在指向 c

              +------+                                                                     
| |
0 | C+3 +----------------------------------------------------------------+
| | |
| | |
+------+ |
| | |
1 | C+2 +-------------------------------------------------+ |
| | | |
| | | |
+------+ | |
| +-------------------------+ | |
2 | C | | | |
CPP -------->| | | | |
| | | | |
+------+ | | |
| +-----------------------+ | | |
3 | C | v v v v
| |
| | +-------------+------------+-----------+------------+
+------+ | "GeksQuiz" | "MCQ" | "TEST" | "QUIZ" |
| | | | |
+-------------+------------+-----------+------------+
0 1 2 3

关于c - 应用于字符串数组指针的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com