c 指针的字符串赋值

指针初始化目的就是让指针知道指向那个地址。

第一种方法,是在声明指针的同时告诉指针指向的地址。

第二种方法,不在声明指针的时候初始化,而是把地址直接赋值给指针变量。

注意:不可以在指针不清楚指向地址的情况下给指针赋值。

问 一: 为什么字符串可以直接赋值给字符指针变量

char *p,a='5';

p=&a; //显然是正确的,

p="abcd"; //但为什么也可以这样赋值??

答:

双引号做了3件事:

1.申请了空间(在常量区),存放了字符串

2. 在字符串尾加上了'/0'

3.返回地址

你这里就是 返回的地址 赋值给了 p

问 二:

char p[10];

p = “hello”;先定义为数组再赋值就不行了

答:

字符串常量"hello"出现在一个表达式中时,"hello"表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。

所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组。

char a[10] = “hello”; //这样可以,这种情况是c语言初始化所支持的

如果写成char a[10]

然后 a = “hello” 这样就错误了。

同样是a数组,char a[10] = “hello”;这种是数组的初始化,和a[0] = ‘h’ a[1] = ‘e’…是一个道理

但是换成char a [10]

然后a = “hello”就不行了 “hello”赋值的值是一个地址,而a虽然也有地址,但是这与指针是不一样的,指针的值是地址,而数组的值虽然也是地址,但是却是一个常量,所以不能给常量赋值。