首页 > 解决方案 > 使用指针存储字符串

问题描述

我开始学习 C 语言中的指针。在遇到“使用指针存储字符数组”主题之前,我理解得很好。一个突出我怀疑的示例程序如下

#include <stdio.h>
main()
{
  char *string;
  string = "good"; 
  printf ("%s", string);
}

这将打印字符串,即,好。

指针应该存储内存地址,或者换句话说,我们将变量的地址(使用地址运算符)分配给指针变量。我不明白的是我们如何能够将字符串直接分配给指针?那也没有地址运算符?另外,我们如何在没有间接运算符 (*) 的情况下打印字符串?

标签: carrayspointers

解决方案


像这样的文字字符串"good"实际上存储为(只读)字符数组。此外,C 中的所有字符串都必须以特殊的“空”字符结尾'\0'

当你做评估时

string = "good";

真正发生的是你string指出了该数组中的第一个字符。

处理字符串的函数知道如何处理这样的指针,并且知道如何使用指针遍历此类数组以查找字符串中的所有字符,直到找到终止符。


稍微不同地看一下,编译创建了它的数组

char internal_array[] = { 'g', 'o', 'o', 'd', '\0' };

然后你string指向数组中的第一个元素

string = &internal_array[0];

请注意,&internal_array[0]实际上等于internal_array,因为数组自然会衰减为指向其第一个元素的指针。


推荐阅读