C语言指针,求大佬指点

新手上路,请多包涵

char a[] = "abcd";
char* p = a;
printf("%s",a);
printf("%s",p);的结果一样?

阅读 1.3k
1 个回答

因为C中数组变量其实是一个隐含的指针变量,
一维数组是同类型指针,二维数组是同类型二级指针(一个指针数组),即

char a[]="abcd"; // 这里实际上声明了一个char * a,并把a的值指向了字符串"abcd"在内存中的首个地址
char * p =a; // 这里把a中存在的地址赋值给指针变量p,所以后面效果是一样的。

类似:

int main(){
    int a[3][4]= { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
    int (*p)[4]=a;
    int i,j;
    p=a;
    for(i=0; i<3; i++){
        for(j=0; j<4; j++) printf("%2d  ",*(*(p+i)+j));
        printf("\n");
    }
    return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进