指针能这样赋值吗?
char *p = “world”;
p[0] = ‘X’;
cout << p << endl;
=======================================
这样好像会出现错误哦,为什么不能这样啊?
编译没问题,肯定是赋值时出现的错误,就是不知道为什么,还请赐教~谢谢~
[解决办法]
这时候的P,你可以这么认为,相当于congt char * 类型了!标准的说法,应该是P指向的是静态数据区。
[解决办法]
char *p = “world”;说明p指向的地址空间的值是常量,不能对p[0]进行赋值,p[0] = ‘X’是不对的
[解决办法]
不允许这样修改字符串
如果想修改,要写成这样:
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";
[解决办法]
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));