gpt4 book ai didi

c - char*如何映射到字符串

转载 作者:行者123 更新时间:2023-11-30 19:57:22 24 4
gpt4 key购买 nike

在 C 语言中,字符 * 使变量成为指针。因此,人们会假设某个变量 char* 将是指向字符的指针,但不知何故它可以成为字符数组。这怎么可能?

最佳答案

术语“字符串”和“指向字符串的指针”在 C standard 中定义。 , 7.1.1 第 1 段:

A string is a contiguous sequence of characters terminated by and including the first null character. The term multibyte string is sometimes used instead to emphasize special processing given to multibyte characters contained in the string or to avoid confusion with a wide string. A pointer to a string is a pointer to its initial (lowest addressed) character. The length of a string is the number of bytes preceding the null character and the value of a string is the sequence of the values of the contained characters, in order.

(该链接指向 n1570.pdf,这是 2011 年 ISO C 标准的最新公开草案。)

C 中没有字符串类型。字符串是一种数据格式,而不是数据类型。字符串通常存储在 char 数组中。

对于指向字符串的指针,正如标准所说,这是指向其第一个字符的指针。 C 通常通过指向数组各个元素的指针来处理数组。指针算术让我们可以通过数组的连续元素推进指针。 (某些语言允许您将数组作为整个对象来处理;在 C 中您无法轻松做到这一点。)

一些资料会告诉您数组实际上是指针,或者 char* 是一个字符串。这些消息来源都是错误的。数组不是指针,指针也不是数组。造成这种困惑的原因是数组通常使用指针进行操作,并且特殊的语言规则规定数组表达式“转换”为指向数组初始元素的指针。但这种转换(实际上是编译时调整)仅适用于数组表达式,而不适用于数组或指针对象。另一个令人困惑的来源是数组参数被“调整”为指针类型;例如 void foo(int n[10]) 实际上意味着 int foo(int *n)

char* 永远不会“变成”char 数组,但想要操作 char 数组的代码可以因此,通过可以前进以指向该数组的连续元素的 char* 指针。 char[] 数组可能包含也可能不包含字符串,具体取决于它是否包含所需的终止空字符'\0'

推荐阅读:comp.lang.c FAQ ,特别是第 6 节。

关于c - char*如何映射到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46249050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com