char []和char *之间的区别?

时间:2011-10-25 09:02:22

标签: c++ c

  

可能重复:
  C - Difference between “char var[]” and “char *var”?
  Difference between char a[]=“string”; char *p=“string”;

有人会解释char []和char *之间的区别究竟是什么? 例如

之间的区别
char name[] = "earth";

char *name = "earth";

谢谢

5 个答案:

答案 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)

  1. char name[]= "earth";在堆栈上创建一个可变数组,其大小为6,值为earth\0
  2. char* name = "earth";定义了一个指向字符串常量的指针,其值为earth\0

答案 3 :(得分:0)

char[]描述了具有固定数量元素的char数组。

char*描述了一个指向char的指针,通常在内存中跟一系列char通常以空字符\0

结尾

答案 4 :(得分:0)

使用

char *name = "earth"

您不得修改名称的内容。

因此

name[2] = 'A';

char *以'\ 0'字符结尾,而name []具有固定大小。

会导致段错误。

  

初始化变量会带来巨大的性能和空间损失   对于阵列。如果您打算更改,只使用数组方法   字符串,它占用了堆栈中的空间并增加了一些严重的开销   每次进入变量的范围。使用指针方法   否则。