关于c ++:char []和char *之间的区别?

Difference between char[] and char*?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C - Difference between “char var[]” and “char *var”?
Difference between char a[]=“string”; char *p=“string”;

有人能解释char[]和char*到底有什么区别吗?例如

1
char name[] ="earth";

1
char *name ="earth";

谢谢


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

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

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

虽然前者往往会衰退为后者,但情况并非总是如此。试着对他们两个都做一个sizeof,看看我的意思。

数组的大小是数组的大小(六个字符,包括终端空值)。

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

你也可以用pname++之类的东西移动指针(除非它们被声明为常量,当然也可以用char *const pname = ...;之类的东西)。不能移动数组名指向它的第二个字符(namea++;)。


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

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

1
(2) char *name ="earth";

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

在C++中,这是不赞成的,它应该是EDCOX1,24。


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

  • 1
    char *name ="earth"

    不能修改名称的内容。

    因此

    1
    name[2] = 'A';

    char*以''字符结尾,而name[]的大小固定。

    将导致SegFault。

    Initializing the variable takes a huge performance and space penalty
    for the array. Only use the array method if you intend on changing the
    string, it takes up space in the stack and adds some serious overhead
    every time you enter the variable's scope. Use the pointer method
    otherwise.


    char[]描述了一个元素数目固定的char数组。

    char*描述了一个指向char的指针,通常在内存中后跟一个char序列,通常以一个空的char \0结束。