我已经在谷歌上搜索过了。问题是我只是找到了一个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);
。
修复此问题,然后现在绘制指针,例如:
我希望*ppc
是第一个字符串(第一个字符串的第一个字符)的地址,而不是
它是!
检查printf("%p\n", (void*) ppc);
和printf("%p\n", (void*) &string[0]);
-它们产生相同的输出。
我也希望&pc
和ppc
之间有某种关系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
。