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";
- char
name[]= "earth";
在堆栈上创建一个可变数组,其大小为6,其值为earth\0
。 -
char* name = "earth";
定义一个指向字符串常量的指针,其值为earth\0
。
char[]
描述了具有固定数量元素的char数组。
char*
描述了一个指向char*
的指针,通常在内存中跟一系列char通常以null char \0
结尾
同
char *name = "earth"
你不能修改名称的内容。
于是
name[2] = 'A';
char *以’\ 0’字符结尾,而name []具有固定大小。
会导致段错误。
初始化变量会对arrays产生巨大的性能和空间损失。 如果您打算更改字符串,只使用数组方法,它会占用堆栈中的空间,并且每次进入变量的范围时都会增加一些严重的开销。 否则使用指针方法。