最近在看C书的时候,有一些基本的概念搞糊涂了。
它说:指向字符串文字的变量不能用于更改字符串的内容。
据我所知还有character literal和integer literal,他们的情况如何?他们也不能更新吗?如果可以,您能举个例子吗?
另外,literal和array有什么区别?像字符数组、字符串字面量,它们实际上是一回事吗?
下面的变量应该叫什么? 整数数组?一个整数文字?
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
2
和 3
,没有其他文字。特别是,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/