【问题标题】:char pointers (strings) compared vs other pointers in Cchar 指针(字符串)与 C 中的其他指针进行比较
【发布时间】:2016-12-09 05:01:30
【问题描述】:

当我们创建一个指向 int 的指针时,我们需要将该指针指向一个变量,但是当我们创建一个字符串时,我们只需要指向一个单词(示例)。 我不明白为什么字符串可以指向值(字符)和其他 int 类型的指针,float 不能。

【问题讨论】:

  • 可以这么说,字符串只是单个字符的集合。
  • C 现在有复合文字,例如int *p = (int []){2, 4}; 所以一个指向int 的指针示例,它不指向变量。
  • "但是当我们创建一个字符串时,我们只需要指向一个单词" --> A string is C 不是指针。 字符串不指向。它是一个 array 字符,最多包含一个终止空字符。 "Hello" 是一个字符串字面量,也是char 的数组6。

标签: c string pointers char


【解决方案1】:

指向int的指针可以指向不包含在变量中的值:

int* p;
p = malloc(sizeof(int));
*p = 5;

值 5 不包含在任何变量中,但 p 指向它。

您的问题真正涉及到指针是如何初始化的。字符串文字可以初始化 char 指针和数组文字可以初始化数组但 int 文字不能初始化 int 指针的方式存在任意性。最终,这就是语言的方式。由于通常使用 int 指针的方式(通过引用传递变量或在动态数据结构中传递变量),实际上并没有很多自然用例用于在声明时初始化单个 int 指针以指向文字值。

【讨论】:

  • 在这种情况下,我们正在创建一个包含 1 个元素的数组?
【解决方案2】:
char* c = {'H','i','\0'};

等同于:

char* c = "Hi";

有点像:

int* a = {0,1,2,3};

等同于:

int* a = malloc(sizeof(int) * 4);
a[0] = 1;
a[1] = 2;
...
...

指针是对指针被声明指向的类型的内存位置的引用,在本例中为字符。

说 10 个字符的数组 char* c[10];是 10 个连续的内存位置(每个位置的大小为 1 个字符)。这里 c 指向该连续内存阵列中的第一个位置。您可以使用[] operator 随机访问 10 个内存位置。 c[0] = 'H'; c[1] = 'i'; 或使用指针算法*c = 'H'; c++; *c = 'i'

这可能会有所帮助:http://www.cplusplus.com/doc/tutorial/ntcs/

【讨论】:

    【解决方案3】:

    在 C 中,字符串文字不是标量值,而是字符数组

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2015-05-19
      相关资源
      最近更新 更多