C语言中对于char*p = “Hello”的理解

根据《程序设计基础(C语言)》(第二版) 编著:高克宁 

对字符串在第139页叙述:

C语言中,字符串需要使用字符数组保存和描述。由于每个字符串都要以空字符('\0')结束,因此,声明一个存储字符串的字符数组时,必须保证字符数组的长度比字符串的长度至少多一个,用以存储字符串的结束符'\0'。

常用的以字符串做初值进行字符数组初始化的方式为:

char c[] = {"Hello"};

char c[] = "Hello";

编译器将字符串"Hello"中的字符赋值到字符数组c中,然后追加到一个'\0',从而使数组c可以作为字符串使用,初始化后,字符数组包含6个元素,其中最后一个元素为'\0',称为字符串结束标志,其ASCII码值为0。

对指向字符串的字符指针在195页的叙述:

如果指针p指向字符串,则*p代表当前所指向的字符。

所以对于代码段 char*p = "Hello";可以做如下理解:

1、char str[6] = {'H','e','l','l','o','\0'};

2、char* p = str;

但值得注意的是,并不能纯粹的这样进行理解:char* p = "Hello";相当于将一个字符内容为 "Hello\0" 的 字符数组 的首地址赋值给 字符指针。因为对于char* p = "Hello"; p[1] = 'A';对于C语言的编译器是不允许的,但是对于 char str[6] = {'H','e','l','l','o','\0'}; char* p = str; p[1] = 'A';对于C语言的编译器来说是允许的。  即通过字符指针直接指向的字符串是不能被修改的。

 

你可能感兴趣的:(C/C++)