char x[50]= "Str"; char y[50] = "n"; 这也能出错 ?

zhulinjia 2008-11-07 11:34:52
	
char x[50]= "Str";
char y[50] = "n";
x=y; // 不就是改下地址嘛. 这也出错. 为什么啊.
...全文
207 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxgamexx 2008-11-09
  • 打赏
  • 举报
回复
PS:

char *str="Str";//这样写是不好的习惯
const char *str="Str";//正确的写法


右值是常量区
三翔馆主 2008-11-09
  • 打赏
  • 举报
回复
同意上面所述,不做任何补充
vbcpascal 2008-11-09
  • 打赏
  • 举报
回复
数组名神似指针
JIGSONG 2008-11-08
  • 打赏
  • 举报
回复
x,y为字符串常量名
[Quote=引用楼主 zhulinjia 的帖子:]
C/C++ code
char x[50]= "Str";
char y[50] = "n";
x=y; // 不就是改下地址嘛. 这也出错. 为什么啊.
[/Quote]
太乙 2008-11-08
  • 打赏
  • 举报
回复


char x[50]= "Str";
char y[50] = "n";
x=y; // 不就是改下地址嘛. 这也出错. 为什么啊.

--------------------------------------------------

上面的x,y均分配在栈上!是数组,在函数传参过程中或者其他情况,会隐式转换为指针!这里,x不能隐式转换为指针
-----------------------------------------------------------------------



char *x = "Str";
char y[50] = "n";
x=y;


-----------------------------------------------
上面的x,y也分配在栈上,x是指针!
--------------------------------



baihacker 2008-11-08
  • 打赏
  • 举报
回复
不要把数组名和指针混淆,
你输出指针和数组名的sizeof值就知道了.
只是在恰当的时候,数组名可以看作指向第一个元素的指针.
jia_xiaoxin 2008-11-08
  • 打赏
  • 举报
回复
这就是数组名和指针的区别,数组名当作指针使用时不能作为l-value
yanhang1589 2008-11-08
  • 打赏
  • 举报
回复
受教了
谢谢楼主的问题
Fogers 2008-11-08
  • 打赏
  • 举报
回复
C/C++学习交流
欢迎热爱C/C++的人士加入群 72837978 一起来交流学习吧
欢迎热爱C/C++的人士加入群 72837978 一起来交流学习吧
欢迎热爱C/C++的人士加入群 72837978 一起来交流学习吧
欢迎热爱C/C++的人士加入群 72837978 一起来交流学习吧
iBug168 2008-11-08
  • 打赏
  • 举报
回复
数组名是常指针

而常量是不能被修改的...
老码观察 2008-11-08
  • 打赏
  • 举报
回复
x和y都表示的是一个内存空间的地址,不能更改
记住数组名就是首地址
BaihowFF 2008-11-08
  • 打赏
  • 举报
回复
char a[];这样声明相当于const char *a; 也就是说指针指向不能改
clhposs 2008-11-08
  • 打赏
  • 举报
回复
数组就是数组 指针就是指针

xxgamexx 2008-11-08
  • 打赏
  • 举报
回复
C/C++ code char *x = "Str";
char y[50] = "n";
x=y;


照楼上这么叫. 那么这2个也不能改变了是不?


x这里是非常量指针,是可以改变其值的

而y[50]的地址是不可改变了,值是可以改变的。如

char y[50]="n";
y[1]='f';
insulted 2008-11-08
  • 打赏
  • 举报
回复

char *x = "Str";
char y[50] = "n";
x=y;

x和y表示数组名,同时也是数组的首地址,是个常量值,存储在stack中,不能改变!


char *x = "Str";
char y[50] = "n";
x=y;

x是一个非const的char型的指针,指向一个const类型的字符串“str”,x的值是可以改变的。
所以x=y是正确的。
但是y=x就是不行了!
insulted 2008-11-08
  • 打赏
  • 举报
回复

char *x = "Str";
char y[50] = "n";
x=y;

x和y表示数组名,同时也是数组的首地址,是个常量值,存储在stack中,不能改变!


char *x = "Str";
char y[50] = "n";
x=y;

x是一个非const的char型的指针,指向一个const类型的字符串“str”,x的值是可以改变的。
所以x=y是正确的。
但是y=x就是不行了!
jackzhhuang 2008-11-07
  • 打赏
  • 举报
回复
数组名可是常量,++,--,赋值都不能改

指针只要不是被声明为const,就可以改。

数组名 != 指针
060 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhulinjia 的帖子:]
C/C++ code
char x[50]= "Str";
char y[50] = "n";
x=y; // 不就是改下地址嘛. 这也出错. 为什么啊.
[/Quote]

x 和y是常量, 他们的值是不可变的
donie_linux 2008-11-07
  • 打赏
  • 举报
回复
x 是个指针,而y是个地址。两者不一样的
zhulinjia 2008-11-07
  • 打赏
  • 举报
回复
	char *x = "Str";
char y[50] = "n";
x=y;

照楼上这么叫. 那么这2个也不能改变了是不?
加载更多回复(2)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧