关于字符串指针不可修改的问题
2015-10-02 23:26
211 查看
C/C++ code
但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:
C/C++ code
答复一:
char *m = "hello";
"hello"保存在静态数据区,该数据不能修改.
由指针m指向. 不能通过指针m来修改静态数据区的值.
char w[] = "hello";
"hello"保存在栈空间数组里. 数组名为w, 函数名为数组的首地址.
可以通过w[i]='a', 或*(w+i)='a'的形式来修改数组内容.
疑问:
这种说法是错误的。如下:
输出结果为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'的形式来修改数组内容.
转自:/article/4894154.html
char*m ="hello"; *(m+1) ='s'; for(;*m !='\0';m++) { printf("%c\n",*m); }
但是出运行时错误。
----------------------------------------------------------
我用数组下标的方式是可以修改的:
C/C++ code
int 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'的形式来修改数组内容.
转自:/article/4894154.html
相关文章推荐
- armel和armhf区别
- IconFont的使用方法
- <最小生成树><lca>Heatwave
- HTML初步学习9
- Hibernate HQL 单表查询
- Android 调用继承application的类
- 把所有界面的状态栏字体颜色设置为白色--iOS开发系列---项目中成长的知识一
- [BZOJ2194]快速傅立叶之二
- noip2012 同余方程 (扩展欧几里得)
- [leetcode]Best Time to Buy and Sell Stock III
- 【C++】c++实现线性表、链表
- java io流系统介绍
- 2014西安F题
- HTTP内建Authentication机制分析
- 程序自动分析(prog)
- 【C++知识点】可重载与不可重载的操作符
- leetcode笔记:Trapping Rain Water
- 2015第40周五
- 正则表达式记录1
- noip2012 开车旅行 (倍增处理)