读书人

指针能这样赋值吗?解决办法

发布时间: 2012-02-08 19:52:21 作者: rapoo

指针能这样赋值吗?
char *p = “world”;
p[0] = ‘X’;
cout << p << endl;
=======================================
这样好像会出现错误哦,为什么不能这样啊?
编译没问题,肯定是赋值时出现的错误,就是不知道为什么,还请赐教~谢谢~


[解决办法]
这时候的P,你可以这么认为,相当于congt char * 类型了!标准的说法,应该是P指向的是静态数据区。
[解决办法]
char *p = “world”;说明p指向的地址空间的值是常量,不能对p[0]进行赋值,p[0] = ‘X’是不对的
[解决办法]
不允许这样修改字符串

如果想修改,要写成这样:

C/C++ code
char p[] = "world";         p[0] = 'X';                       cout<<p<<endl;
[解决办法]
因为是const char*
[解决办法]
指针指向的是地址空间,只有用取址运算符和应用才可以取到那个地址相对应的数据的。
[解决办法]
大概明白了,谢谢。
那这样写:
char *p = “world”;
*p = "hello ";
cout < < p < < endl;
意味著指向了另一片内存空间了吧?
-----------------------
不对,*p = "hello ";是像*p所指向的地址空间赋值了,而且仅仅只能付一个值,不能赋一个字符串,由于上一句
char *p=“world”;确定了指针变量p指向的是静态数据区,该区域的数据不能被重新写入,所以接下来的*p = "hello ";是错误的,如果要让指针指向“hello”所在区域的手地址,应该这样写: p="hello";
[解决办法]
C/C++ code
int   main() {    char chr[] = "hello word";    char *p = chr;    chr[0] = 'f';    p[1]   = 'o';    printf( "%s \r\n",p); }
[解决办法]
char *p = “world”;
这只不过是一个变量而已,
如果想赋值的话,肯定要先分配单元.
p=(char*)malloc(sizeof(n));

读书人网 >C语言

热点推荐