char str[100];
char *q;
q
和str
之间的区别是什么......他们俩都不是char*
请注意,我说的是str
,而不是str[100]
答案 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)
答案 4 :(得分:0)
在访问字符串中的数据方面,是的,str
可以被视为char*
,或者更确切地说,char *const
,因为您无法为其分配不同的地址str
。
严格来说,它们是不同的类型,这就是为什么您无法为str
分配新值的原因。可以把它想象成编译器:每个变量只是它为你分配的特定地址的标签。 str
表示由100 char
s组成的缓冲区的起始地址,但q
是地址的地址,而地址的地址又是{{1}的地址}}
您可以更改变量的值,但不能(在运行时)更改变量所在的位置(即其地址)。
答案 5 :(得分:0)
在该示例中,str的类型为char [100],而q是指向char的指针。它可以指向char类型的任何单个数组元素,但不指向char类型的数组。