c - 这 4 项 :character, 数组、字符串、文字之间有什么区别。在C?

标签 c arrays string

最近在看C书的时候,有一些基本的概念搞糊涂了。

它说:指向字符串文字的变量不能用于更改字符串的内容。

据我所知还有character literalinteger literal,他们的情况如何?他们也不能更新吗?如果可以,您能举个例子吗?

另外,literalarray有什么区别?像字符数组字符串字面量,它们实际上是一回事吗?

下面的变量应该叫什么? 整数数组?一个整数文字

int contestants[] = {1, 2, 3};

我已经总结了一些例子,但我还是有点乱:

char s[] = "How big is it?";  //s is an array variable

char *t = s;  //t is a pointer variable to a string literal "How big is it?"

字符串字面量:"ABC"

字符字面量:'a'

整数字面量:1

我被这 4 项搞得一团糟:字符、数组、字符串、文字。我还是一团糟。

字符数组字符串字面量是一回事吗?

字符数组字面量数组相同吗?

最佳答案

文字是程序文本中表示值的标记。有像 "123" 这样的字符串文字,像 'a' 这样的字 rune 字和像 7 这样的数字文字。

int contestants[] = {1, 2, 3};

在上面的程序片段中,有三个文字 1 23,没有其他文字。特别是,contestants{1, 2, 3} 都不是文字。

值得注意的是,C 标准仅在引用字符串文字时使用文字一词。其他类型被正式称为常量。但是您可能会发现它们在各种地方都被称为文字,因此我将它们包含在这里。 “整数文字”和“整数常量”是一回事。

字符串字面量也是程序中的一个对象(一段数据,一 block 存储区域),它与之前意义上的字符串字面量相关联。这段数据是一个字符数组。并非每个字符数组都是字符串文字。没有 int 数组是文字。

指针可以指向字符串文字,但不能指向字 rune 字或整数文字,因为后两种不是对象(没有与之关联的存储)。指针只能指向一个对象。你不能将指针指向文字 5。因此不会出现是否可以修改此类内容的问题。

char* p = "123";

在上面的程序片段中,"123" 是一个文字,p 指向它。您不能修改 p 指向的对象。

char a[] = "123";

在上面的程序片段中,a是一个字符数组。它用字符串文字“123”初始化,但它本身不是文字,可以自由修改。

int i = 5;

上面,5 是一个文字,而 i 不是。 i 是用文字初始化的,但它本身不是一个。

int k[] = {1, 2, 3};
int* kp = k;

在上面的行中,与之前的行非常相似,数组 k 及其元素都不是文字。它们只是用文字初始化。 kp 是指向数组第一个元素的指针。可以用指针更新数组; kp[1] = 3;

关于c - 这 4 项 :character, 数组、字符串、文字之间有什么区别。在C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29405410/

相关文章:

c - 如何从 C 控制 Lua 脚本(暂停、恢复、终止)?

arrays - jq - 将对象列表转换为汇总对象

python - 在 Tensorflow 中读取 TensorArray 总是返回零

python - 在 Python 中将两个字符串转换为其十六进制值

c - 中值滤波,窗口大小 3,5,7,带 C

c - 如何在应用程序包内的 C 语言中查找当前目录 [macOS]

c - 为什么 Ctrl-Z 不触发 EOF?

javascript - 使用 Parse 更正 for 循环中的顺序

C# 正则表达式中匹配字母、数字和特殊字符

c++ - 使用 CString 实例化枚举