0 c arrays pointers memory-address dereference
请解释为什么下面的代码失败了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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
只是为了澄清我想要实现的目标.我有一个接受char**作为参数的函数,因此我想转换char ar[200]为char**,但应用程序冻结.
您已声明了一个字符数组并为其赋值.如果你只提到数组的名称,你实际上是在提到这个数组的基地址.指针可以存储地址,您可以定义字符指针并为其指定字符数组的基址.
例如
char ar[200]="Hello World";
char *p=a; //assign the base address of a to p;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用%s格式说明符和字符数组的基址(字符串)打印字符串.
printf("%s",a);// print the string "Hello World". here a is the base address
printf("%s",p);//print the string "Hello World". here p is the base address
Run Code Online (Sandbox Code Playgroud)
这会奏效
#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);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
char *q=a;
char **P=&q;
printf("%s",*p);
Run Code Online (Sandbox Code Playgroud)
如果这是你想要的