C语言中指向字符串常量的指针问题
4个回答
展开全部
第一个:char
*p
=
"123456";
char
*s
=
"asdghh";
*s
=
*p;
你这个之所以会错,是因为指针s指向的是常量字符串
asdghh
而*s=*p相当于改变常量字符串的值,常量是不能改变的,而且常量也不能做左值,所以出错。
第二个:
char
a[]="123456";//这个的意思是
在内存充开辟空间
把常量字符串复制到这个空间
char
*p
=
a;//这个说明指针p存储的是数组变量a的地址
char
a1[]="asdghh";
//同上
char
*s
=a1;
//同上
*s
=
*p;
//
这句的意思是
把指针p所指向空间的值(这里为数组a)复制到指针s所指向的空间(这里为数组a1)
*p
=
"123456";
char
*s
=
"asdghh";
*s
=
*p;
你这个之所以会错,是因为指针s指向的是常量字符串
asdghh
而*s=*p相当于改变常量字符串的值,常量是不能改变的,而且常量也不能做左值,所以出错。
第二个:
char
a[]="123456";//这个的意思是
在内存充开辟空间
把常量字符串复制到这个空间
char
*p
=
a;//这个说明指针p存储的是数组变量a的地址
char
a1[]="asdghh";
//同上
char
*s
=a1;
//同上
*s
=
*p;
//
这句的意思是
把指针p所指向空间的值(这里为数组a)复制到指针s所指向的空间(这里为数组a1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
的确字符串常量是不能修改的,但是编译器并不认为p[0]='x'有任何错误,所以它编译的时候没有问题都,连接也不会有问题,但是运行的时候一定会出错。
也就是能弹一个内存错误。
也就是能弹一个内存错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意:你这个问题是个特例,在C语言里实际上是可以修改的,且在
TC
下可以通过。如果你用VC,你将不会通过编译。
如果你不想修改它可以加个
const,如:
const
char
*p
=
"hello";
这样就不会编译通过了。
TC
下可以通过。如果你用VC,你将不会通过编译。
如果你不想修改它可以加个
const,如:
const
char
*p
=
"hello";
这样就不会编译通过了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询