需要帮助来理解c中指针和数组的代码吗
我需要了解注释行的作用是什么需要帮助来理解c中指针和数组的代码吗,c,arrays,pointers,C,Arrays,Pointers,我需要了解注释行的作用是什么 #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]; //what this line does? //[-1] does wh
#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]; //what this line does? //[-1] does what?
printf("%s\n", t);
}
#包括
虚无乐趣(char**);
int main()
{
char*argv[]={“ab”、“cd”、“ef”、“gh”};
乐趣(argv);
返回0;
}
虚无乐趣(字符**p)
{
char*t;
t=(p+=sizeof(int))[-1];//这行做什么?//[-1]做什么?
printf(“%s\n”,t);
}
该-1
仅表示它转到上一项:
x[-1]=*(x-1)
整条线都是
*(x+sizeof(int)-1)
sizeof(int)可能为4,因此该行等于:
*(x+4-1)=*(x+3)=x[3]="gh"
假设机器中的
int
为4个字节,则将sizeof(int)
替换为4:
t = (p+= 4))[-1];
只需向前移动指针p
4个元素,向后移动1个元素,然后获取元素
在本例中,数组有4个元素,因此向前移动到结束后的一个元素,然后向后移动到最后一个元素,即“gh”
几点注意:
只是a[-1]
*(a-1)
- 您需要确保在执行指针算术时,指针始终指向数组中的一个元素或超出数组末尾的一个元素
- 此外,名称
也不是一个好主意,因为我们通常使用它来 请参阅argv
的参数main
**p
包含argv[0]
元素的地址,即“ab”
。然后将其递增2
(int的大小以2字节表示)。现在它指向“ef”
。然后将其递减为-1
。因此最后指向“cd”
。因此它将t
的值打印为“cd”
注意:
由于C是一种依赖于机器的语言,sizeof(int)可能返回
不同的价值观
上述程序的输出将是Windows(Turbo C)中的cd和
Linux中的gh(GCC)
为了更好地理解它,请在中编译并执行上述程序
Windows(带Turbo C编译器)和Linux(GCC编译器)
有人已经给出了答案,但我敢肯定这是一个家庭作业问题,从长远来看,在你的计算机上运行这些代码会更好。如果您运行它,您将能够准确地看到该行正在执行的操作。@lxt:我已经运行了它,并将输出视为
gh
,这对我来说很奇怪。这就是为什么我要求理解代码,而不是告诉输出。