最近读一本C书时,有些基本概念让我感到困惑。

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

据我所知,还有字符文字和整数文字,它们的情况如何?它们也不能更新吗?如果可以,您可以举个例子吗?

此外,文字和数组有什么区别?像字符数组,字符串文字,它们实际上是一件事吗?

我该如何称呼下面的变量?整数数组?整数文字?

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')和数字文字(如7)。

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


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

值得注意的是,C标准仅在引用字符串文字时使用文字文字。另一种正式称为常数。但是您可能在所有地方都将它们称为文字,因此我在此处将它们包括在内。 “整数文字”和“整数常量”是同一回事。

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

指针可以指向字符串文字,但不能指向字符文字或整数文字,因为后两种不是对象(没有与之关联的存储)。指针只能指向一个对象。您不能将下注者指向文字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是指向数组第一个元素的指针。可以使用thos指针更新数组。 kp[1] = 3;

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

10-11 02:35
查看更多