字符串的名称是char指针吗?

时间:2014-01-23 17:12:35

标签: c pointers char

char str[100];
char *q;

qstr之间的区别是什么......他们俩都不是char*
请注意,我说的是str,而不是str[100]

6 个答案:

答案 0 :(得分:3)

char str[100];

str是数组对象的名称。它不是真正意义上的指针。

但是像数组类型的任何表达式一样,在大多数情况下,它隐式地转换为数组的第一个元素的地址(或等效地,指向)。此隐式转换生成指针;没有指针 object ,所以没有任何东西可以修改。 (结果指针值的类型为char*,而不是const char*char *const。)

此处适用的例外情况是,str是一元&sizeof运算符的操作数。

char *q;

q是指针对象的名称,几乎可以修改任何非const对象。

参见comp.lang.c FAQ的第6部分。

答案 1 :(得分:1)

q是一个未初始化的指针,而str指向某个地方分配了100个字节。

此外,您可以更改q指向的位置。但您以后无法更改str的地址。

答案 2 :(得分:1)

按照惯例,数组的名称是一个常量,它的值是它的第一个元素的地址。

在大多数情况下,当在表达式或语句中使用str时,它会隐式转换为数组的第一个元素的地址。其中一个例外是sizeof运算符。在这种情况下(sizeof(str)),str是数组本身,并且未转换为地址,这就是sizeof(str)结果为100的原因。

答案 3 :(得分:1)

他们不一样。

数组与指针问题已经在StackOverflow上大量存在。请参阅thisthisthis

答案 4 :(得分:0)

在访问字符串中的数据方面,是的,str可以被视为char*,或者更确切地说,char *const,因为您无法为其分配不同的地址str

严格来说,它们是不同的类型,这就是为什么您无法为str分配新值的原因。可以把它想象成编译器:每个变量只是它为你分配的特定地址的标签。 str表示由100 char s组成的缓冲区的起始地址,但q是地址的地址,而地址的地址又是{{1}的地址}}

您可以更改变量的,但不能(在运行时)更改变量所在的位置(即其地址)。

答案 5 :(得分:0)

在该示例中,str的类型为char [100],而q是指向char的指针。它可以指向char类型的任何单个数组元素,但不指向char类型的数组。