可能重复:
C - Difference between “char var[]” and “char *var”?
Difference between char a[]=“string”; char *p=“string”;
有人会解释char []和char *之间的区别究竟是什么? 例如
之间的区别char name[] = "earth";
和
char *name = "earth";
谢谢
答案 0 :(得分:5)
char namea[] = "earth";
char *pname = "earth";
一个是数组(名称namea
指的是块字符)。
另一个是指向单个字符的指针(名称pname
指的是一个指针,恰好指向一个字符块的第一个字符。)
虽然前者经常会腐烂到后者,但情况并非总是如此。尝试对它们进行sizeof
以查看我的意思。
数组的大小就是数组的大小(六个字符,包括终结符号null)。
指针的大小取决于指针的宽度(4或8,或其他)。 pname
指向的大小不是数组,而是第一个字符。因此它将是1。
您还可以移动指针,例如pname++
(除非它们被声明为常量,当然还有char *const pname = ...;
之类的东西)。您无法移动数组名称以指向它的第二个字符(namea++;
)。
答案 1 :(得分:2)
(1) char name[] = "earth";
name
是一个字符数组,其内容为'e'
,'a'
,'r'
,'t'
,'h'
,{{1 }}。此字符的存储位置取决于声明0
的位置(通常堆栈或数据段)。
name[]
(2) char *name = "earth";
是指向const字符串的指针。 name
的存储位置位于只读内存区域。
在C ++中,不推荐使用它,它应该是"earth"
答案 2 :(得分:1)
name[]= "earth";
在堆栈上创建一个可变数组,其大小为6,值为earth\0
。char* name = "earth";
定义了一个指向字符串常量的指针,其值为earth\0
。答案 3 :(得分:0)
char[]
描述了具有固定数量元素的char数组。
char*
描述了一个指向char的指针,通常在内存中跟一系列char通常以空字符\0
答案 4 :(得分:0)
使用
char *name = "earth"
您不得修改名称的内容。
因此
name[2] = 'A';
char *以'\ 0'字符结尾,而name []具有固定大小。
会导致段错误。
初始化变量会带来巨大的性能和空间损失 对于阵列。如果您打算更改,只使用数组方法 字符串,它占用了堆栈中的空间并增加了一些严重的开销 每次进入变量的范围。使用指针方法 否则。