有人能解释一下下面的程序是如何工作的吗?这里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时,将其作为字符串打印。

10-04 16:24
查看更多