有人能解释一下下面的程序是如何工作的吗?这里name[]
是指向char的指针数组,那么name如何包含值而不是地址,存储的值为什么是字符串而不是字符?
#include <stdio.h>
const int MAX = 4;
int main () {
char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali", };
int i = 0;
for ( i = 0; i < MAX; i++) {
printf("Value of names[%d] = %s\n", i, names[i] );
}
return 0;
}
最佳答案
你可以举一个简单的例子:
char *s = "abcd";
printf( "s = %p\n", (void *)s ); // 1) address
printf( "s = %c\n", *s ); // 2) char
printf( "s = %s\n", s ); // 3) string
这里
s
是指向char的指针(类似于names[i]
,也是指向char的指针)。实际上s
可以解释为1)地址,2)指向char的普通指针,或3)字符串。首先
s
是一个指针,所以s
保存它指向的某个对象的地址。您可以使用printf
控制字符串通过第一个%p
检查它是什么地址。其次,
s
是一个指向char的指针,因此您可以使用printf%c
将其作为正常值,printfs
将打印第一个char。第三,
string
是指向char的指针,char是声明C\0
的一种方法(另一种方法是使用数组)。C字符串是以%s
作为分隔符结尾的连续字符数组。使用printf时,将其作为字符串打印。