我已经在谷歌上搜索过了。问题是我只是找到了一个char指针或char指针做什么的解释,以及char指针数组是什么。
实际上我的程序正在运行。简单地说,当我闭上眼睛接受一切的时候,世界是美好的,但我不断地在脑海中闪现一些问题,我无法回答。长话短说,我希望没有人会因为我的问题而杀了我,因为这对你们中的一些人来说可能是微不足道的,显然对我来说不是!
所以她我们走:

char *pc;
char **ppc;
char *string[2] = {"Hello","World",};
ppc = string;
pc = *ppc;


printf("%p\n",ppc);
printf("%p\n",&pc);
printf("%p\n",*ppc);
printf("%p\n",pc);
printf("%p\n",&string[0]);  //or &string
printf("%c\n", **ppc);
printf("%s", *ppc);

运行此命令后,我希望*ppc是第一个字符串(第一个字符串的第一个字符)的地址,这不是,我还希望&pc和ppc之间存在某种关系,这也不是。
ppc是指向指针的指针,但在到达字符串的第一个元素之前,我完全不知道ppc指向的指针是什么?
如果这听起来很愚蠢,我很抱歉,但我真的很想理解。
任何帮助都将不胜感激!

最佳答案

您的代码调用未定义的行为,因为%p将指针换成void,因此所有print语句都必须将其参数转换成void*,例如printf("%p\n", (void*) ppc);
修复此问题,然后现在绘制指针,例如:
c - C理解指针数组的问题-LMLPHP
我希望*ppc是第一个字符串(第一个字符串的第一个字符)的地址,而不是
它是!
检查printf("%p\n", (void*) ppc);printf("%p\n", (void*) &string[0]);-它们产生相同的输出。
我也希望&pcppc之间有某种关系
ppc有第一个字符串的地址(“Hello”)。
*ppc具有字符串的第一个字符(“H”)的地址。
pc具有字符串的第一个字符(“H”)的地址。
&pc的地址是pc
所以你的期望是错误的,pc*ppc应该有相同的地址,而不是&pc
进一步解释:
string是指针数组。char是指向char **ppc;的双指针。
在这里:

ppc = string;

char设置为指向ppc的第一个元素的地址。
这:
pc = *ppc;

使string指向pc实际指向的位置,即ppc的第一个元素,即string

10-08 04:08