【发布时间】:2016-09-17 15:48:09
【问题描述】:
请解释为什么下面的代码在line 10 处失败。
如何打印p 的值,即Hello World。
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char ar[200] = "Hello World";
strcat(ar, " !");
printf("%s\n", ar);
char **p = &ar;
printf("%s\n", *p[0]);
return 0;
}
编辑:
只是为了进一步说明我想要实现的目标。我有一个接受char** 作为参数的函数,因此我想将char ar[200] 转换为char**,但应用程序冻结了。
【问题讨论】:
-
不应该是
printf("%s\n", (*p)[0]);吗? -
@RoshDonniet OP 想通过 p 打印整个字符串
-
是
printf("%s\n", p[0]);或printf("%s\n", *p);。通过执行printf("%s\n", *p[0]);,指向字符串p的指针被取消引用两次。因此,*p[0]是一个字符,而不是一个字符串。 -
@RoshDonniet,我试过了,但程序最后崩溃了
-
&ar的类型是char (*)[200](指向char的200 元素数组的指针),而不是char **。
标签: c arrays pointers memory-address dereference