关于字符串指针不能修改的疑问
2018-02-08 14:45
211 查看
C/C++ code示例:char*m ="hello"; *(m+1) ='s'; for(;*m !='\0';m++){ printf("%c\n",*m); }
但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:C/C++ codeint i =0; char w[] ="hello"; w[1] ='s'; while(w[i] !='\0'){ printf("%c\n",w[i]); i++; } 答复一:char *m = "hello";
"hello"保存在静态数据区,该数据不能修改.
由指针m指向. 不能通过指针m来修改静态数据区的值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容. 疑问:这种说法是错误的。如下: static int a = 10;
int *b = &a;
*b = 20;
cout<<a<<endl;输出结果为20.我们依然通过指针修改了存储在静态存储区里的数据源。 //---------------------------------------------------答复二: 字符串“hello”本身就是一个常量字符指针,而对于指针m,无非就是一个地址的拷贝,也就是“hello”地址的拷贝,相当于m指向一个字符串常量,字符串常量是不予许改变的!
而对于w[]来说就不一样了,虽然hello本身是常量,不过此时拷贝给w[]的不是地址,而是内容,也就是“hello”,也就是w本身拥有一个自己的hello副本,可以对其进行想要的合法操作,比如改变等!! 回复三:char *m = "hello";
"hello"保存在文字常量区,该数据不能修改,默认有只读属性.
由指针m指向. 不能通过指针m来修改此值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
总结,第二种说法的可靠性较高。
但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:C/C++ codeint i =0; char w[] ="hello"; w[1] ='s'; while(w[i] !='\0'){ printf("%c\n",w[i]); i++; } 答复一:char *m = "hello";
"hello"保存在静态数据区,该数据不能修改.
由指针m指向. 不能通过指针m来修改静态数据区的值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容. 疑问:这种说法是错误的。如下: static int a = 10;
int *b = &a;
*b = 20;
cout<<a<<endl;输出结果为20.我们依然通过指针修改了存储在静态存储区里的数据源。 //---------------------------------------------------答复二: 字符串“hello”本身就是一个常量字符指针,而对于指针m,无非就是一个地址的拷贝,也就是“hello”地址的拷贝,相当于m指向一个字符串常量,字符串常量是不予许改变的!
而对于w[]来说就不一样了,虽然hello本身是常量,不过此时拷贝给w[]的不是地址,而是内容,也就是“hello”,也就是w本身拥有一个自己的hello副本,可以对其进行想要的合法操作,比如改变等!! 回复三:char *m = "hello";
"hello"保存在文字常量区,该数据不能修改,默认有只读属性.
由指针m指向. 不能通过指针m来修改此值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
总结,第二种说法的可靠性较高。
相关文章推荐
- 关于字符串指针指向内容不能修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 为什么不能修改指向字符串的指针
- 指针指向的字符串不能修改
- 关于字符串指针不可修改的问题
- 指向字符串的指针为何不能用来修改此字符串
- 指针为何不能修改其指向的常量字符串
- 关于字符串指针不可修改的问题
- 指向字符串的指针为何不能用来修改此字符串(c语言)http://blog.sina.com.cn/s/blog_68ff96b70101him1.html
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 关于cout输出字符串指针
- (讨论)关于const修饰的值不能修改的实践
- 关于split分割字符串,空结果不能得到的问题(转)
- 指针与字符串:(const)char *p2 = "lmj";定义的是一个字符串常量!符串常量,正因为是常量,所以它内部的字符是不允许修改的。
- Linux Shell关于传入时间字符串的修改
- 关于数组指针,字符串指针的一些小细节
- 关于Visual Studio和SQL Server共同安装时,后者安装路径不能修改的解决方案。