char 和char *之间的区别?

可能重复:
C – “char var []”和“char * var”之间的区别?
char a [] =“string”之间的区别; char * p =“string”;

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

char name[] = "earth"; 

 char *name = "earth"; 

谢谢

 char namea[] = "earth"; char *pname = "earth"; 

一个是数组(名称namea是指一个字符 )。

另一个是指向单个字符的指针(名称pname指的是指针,恰好指向一个字符块的第一个字符)。

虽然前者经常会腐烂到后者,但情况并非总是如此。 尝试对它们做一个sizeof来看看我的意思。

数组的大小就是数组的大小(六个字符,包括终止null)。

指针的大小取决于指针的宽度(4或8,或其他)。 pname 指向的大小不是数组,而是第一个字符。 因此它将是1。

您还可以使用pname++类的东西来移动指针(除非它们被声明为常量,当然还有char *const pname = ...; )。 您无法移动数组名称以指向它的第二个字符( namea++; )。

 (1) char name[] = "earth"; 

name是一个字符数组,其内容为'e''a''r''t''h'0 。 此字符的存储位置取决于声明name[]位置( 通常是堆栈或数据段)。

 (2) char *name = "earth"; 

name是指向const字符串的指针。 "earth"的存储位置在只读存储区中。

在C ++中,这是不推荐使用的,它应该是const char *name = "earth";

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

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

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

 char *name = "earth" 

你不能修改名称的内容。

于是

 name[2] = 'A'; 

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

会导致段错误。

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