char *a [ ] = {“China”,“French”,“America”,“German”};
printf(“%p \n”,a[0]);
printf(“%s \n”,a[0]);
这是因为 %p
会以指针的形式输出变量的地址,而 %s
则会以字符串的形式输出变量指向的字符序列。在这段代码中,a[0]
是一个 char*
类型的指针,其存储的是一个指向字符串 "China"
的地址。因此,printf("%p \n",a[0]);
输出的是指针变量 a[0]
的地址,而 printf("%s \n",a[0]);
输出的是指针变量 a[0]
指向的字符串序列。
更具体来说,当使用 %p
时,printf
会将该变量在内存中的地址作为一个十六进制数输出,而当使用 %s
时,printf
会从指针所指地址开始读取字符串序列,并将该序列作为字符串输出,直到读取到字符串末尾的’\0’字符。因此,即使是同一个指针变量,在使用不同的格式化符进行输出时,输出的结果也是不同的。