C数组到指针

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**,但应用程序冻结.

Ani*_*rma 5

您已声明了一个字符数组并为其赋值.如果你只提到数组的名称,你实际上是在提到这个数组的基地址.指针可以存储地址,您可以定义字符指针并为其指定字符数组的基址.

例如

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)

如果这是你想要的

  • 你应该解释它为什么有用而他的代码没有 (6认同)