其实数组char a[10]的a所代表的地址与char *szA是一致的,你这么写char *szA = “xxx”就是把数组{‘x’, ‘x’, 'x’, ‘\0’}的首地址给了szA,c语言规定字符串是以\0结尾,这样你打印的时候c语言会一个一个输出字符到\0停止。
其实其他指针也可以这么用int arr[10] = {0};int *p = arr;
但是数组指针和普通指针并不是一个东西,&arr这个指针会指向整个数组(当然他的值还是第一个元素,因为指针一般都是从第一个元素开始指的,以后的struct也是这样),因为是指向整个数组的,所以这个数值+1或-1的时候偏移量就是整个数组的大小
还有就是因为arr这种写法本质是声明数组所以sizeof(arr)会返回数组的大小,如果是szA那种写法sizeof(szA)只会返回指针的大小(一般是4),而且如果在函数的参数列表中作为一个参数 void fun(char cArr[])这个[]什么都不用填,填了也没用他就是一个指针了所以一般接受字符串写的是指针:这样void fun(char *cArr),创建字符串使用数组:这样 Char szBuffer[10] = {0};
至于为什么输出printf("&s", szA)而不是printf("&s", *szA)这个我也讲了 字符串是本质是char数组,char * 是可以接受字符串的,c语言无论是输入数组还是指针都是根据首地址(就是指针指向的地址)向后依次输出,到\0结束(如果没有\0就会往后接着输出了,如果后面恰巧有\0就停,没有的话...那就不知道会怎摸样了)