博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于字符串指针不可修改的问题
阅读量:6685 次
发布时间:2019-06-25

本文共 1016 字,大约阅读时间需要 3 分钟。

C/C++ code

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'的形式来修改数组内容.

转载地址:http://erqao.baihongyu.com/

你可能感兴趣的文章
使用IEDScout校验61850出错记录及解决方案
查看>>
AD在更新PCB的时候,每次封装都会改变位置?
查看>>
Delphi启动外部程序
查看>>
python操作mysql总结
查看>>
JavaScript学习-自定义对象属性迭代器
查看>>
通过拼接SQL字符串实现多条件查询
查看>>
查看java源码显示source not found
查看>>
Linux常用经典命令
查看>>
命令行参数及全局替换程序
查看>>
Android Studio 快捷键
查看>>
hive的函数
查看>>
【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
查看>>
【Java学习笔记之二十六】深入理解Java匿名内部类
查看>>
android布局属性详解
查看>>
Ngine X 完全开发指南 读书笔记-前言
查看>>
cocos2d游戏 如何显示分数 分数变化
查看>>
OD命令
查看>>
GNU C相关
查看>>
.NET面试题解析(01)-值类型与引用类型
查看>>
SQL Server-聚焦过滤索引提高查询性能(十)
查看>>