任何人都可以解释以下程序的工作原理吗?这里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;
}
答案 0 :(得分:2)
像"Zara Ali"
这样的字符串文字计算其第一个字符的地址。
字符串文字通常存储在只读数据段中。
基本上你的数组包含地址。
你也可以写
char *str="Zara Ali";
//The value of a string literal is the address of its first character.
答案 1 :(得分: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
,这将打印第一个字符。
第三,s
是指向char的指针,这是声明C string
的另一种方式(另一种方式是使用数组)。 C字符串是以\0
结尾的连续字符数组作为分隔符。使用printf %s
时,您将其打印为字符串。