谁能解释这个赋值,双指针和输出

时间:2015-02-07 21:21:33

标签: c function

 #include <stdio.h>
 void fun(char**);

 int main()
 {
     char *argv[] = {"ab", "cd", "ef", "gh"};
     fun(argv);
     return 0;
 }
 void fun(char **p)
 {
     char *t;
     t = (p+= sizeof(int))[-1];
     printf("%s\n", t);
 }

有人可以解释一下,赋值t =(p + = sizeof(int))[ - 1]; ..给出的是cd ..

3 个答案:

答案 0 :(得分:0)

此代码旨在让您感到困惑。解释它不会真正有用,因为它会阻止你学习理解编写错误的代码。

代码很可能是在很久以前写的,在8位和16位计算机的时候,当sizeof(int)是2.假设sizeof(int)= 2,并仔细检查代码步骤步。

答案 1 :(得分:0)

这是非常糟糕的代码,答案是“cd”,因为p首先递增2并从p [0]设置为p [2]。然后将其递减1并设置为p [1],其指向字符串“cd”。它是一个双指针,因为字符串“cd”本身会生成一个指针。

答案取决于您的系统,在大多数系统上它都会指向p [3]。

我同意编写此代码会让您感到困惑。

答案 2 :(得分:0)

initally **p包含argv[0]元素的地址,即"ab"。然后按2增加(以2个字节为单位的int的大小)。现在它指向"ef"。然后按-1递减。所以最后指向"cd"。因此它将t打印为"cd"

您可以找到我的回答here