【发布时间】:2017-09-15 12:37:36
【问题描述】:
我已经对此进行了一些谷歌搜索。问题是我只是找到解释 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 指向的指针是什么? 如果这一切听起来很愚蠢,我很抱歉,但我真的很想理解它。 任何帮助将不胜感激!
【问题讨论】:
-
*ppc是第一个字符串的地址 - 查看你最后一个printf的输出 -
相关:stackoverflow.com/questions/4832082/…。如果您稍微搜索一下,可以找到很多几乎重复的内容。
-
另外,
%p需要一个 pointer-to-void,因此您必须将每个参数强制转换为(void*)。此外,&string[0]和&string指向相同的地址,但不同的东西。一个说:“那是字符串先生”,另一个说“那是字符串先生的头”。 -
所有
%p行都会调用未定义的行为。仔细阅读手册页并使用正确的类型。
标签: c arrays string pointers memory