C语言中指向字符串常量的指针问题

2025-02-25 05:33:04
推荐回答(4个)
回答1:

定义成字符数组的时候,数组名就是指向数组的首地址的指针,数组在一串连续的地址中,当执行复制向后移动指针的时候会依次读取字符,没问题,但是如果是指针,它指向的是在静态区的一串字符串的首地址,你要把指针向后移动,他的下一个指针指向何处就是个问题了,也就是你访问了不属于你的内存地址,所以出错了!!!

回答2:

第一个: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)

回答3:

的确字符串常量是不能修改的,但是编译器并不认为p[0]='x'有任何错误,所以它编译的时候没有问题都,连接也不会有问题,但是运行的时候一定会出错。
也就是能弹一个内存错误。

回答4:

注意:你这个问题是个特例,在C语言里实际上是可以修改的,且在
TC
下可以通过。如果你用VC,你将不会通过编译。
如果你不想修改它可以加个
const,如:
const
char
*p
=
"hello";
这样就不会编译通过了。