为什么字符串可以赋值给字符指针变量?
⼀、C语⾔中,为什么字符串可以赋值给字符指针变量?
char *p;
a='5';
p=&a; //显然是正确的,
p="abcd"; //但为什么也可以这样赋值??
问:⼀直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点!
答:双引号做了3件事:
1.申请了空间(在常量区),存放了字符串
2. 在字符串尾加上了'/0'
3.返回地址
你这⾥就是返回的地址赋值给了 p
⼆、char *p = “hello”; 表达式为什么可以,⽽把p换成数组,然后再赋值就不⾏了
串变量和串常量的区别解释:别说换成数组,就是 char *pch1 = 'h'; 都是不可以的,因为双引号做了3件事,别的都不会做。
字符串常量"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虽然也有地址,但是这与指针是不⼀样的,指针的值是地址,⽽数组的值虽然也是地址,但是却是⼀个常量,所以不能给常量赋值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论