我不了解这种指针的用法

时间:2019-09-22 11:14:59

标签: c

我正在尝试理解指针的这种用法。从我到目前为止的认识来看,值指针持有的是对另一个实体的内存地址的引用,当使用*符号时,我们将访问指针所引用的实体的值。

但是,在我正在使用的教程中遇到的这段代码中,ptr_str指针的字符串值不是内存地址,所以我不明白*ptr_str(我期望它是被引用实体的值)在for循环中使用。

char *ptr_str; int i;
ptr_str = "Assign a string to a pointer.";
for (i=0; *ptr_str; i++)
    printf("%c", *ptr_str++);

1 个答案:

答案 0 :(得分:2)

此:

ptr_str = "Assign a string to a pointer.";

是此的简写:

// Somewhere else:
char real_str[] = {'A', 's', 's', 'i', 'g', ..., '.', '\0'};

// In your main():
ptr_str = real_str;
// or
ptr_str = &real_str[0];

换句话说,像"Hello World"这样的字符串文字实际上是指向保存您的字符串的字符数组的指针。这些都是由编译器透明完成的,因此乍一看可能会造成混淆。

如果您感到好奇,请查看this other answer of mine,我将在其中进行详细说明。