int *p=5为什么不行?char *s="se"却可以?

wgf42422 2009-12-20 06:51:22
如题。。。。。。
...全文
194 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-12-20
  • 打赏
  • 举报
回复
写程序不是为了编译不报错,而是为了正确性。你这种方法也许能把编译错误弄没了,但是在绝大多数情况下逻辑都会是错误得。
[Quote=引用 13 楼 wxhanshan 的回复:]
int *p=(int *)5
[/Quote]
辛鹤 2009-12-20
  • 打赏
  • 举报
回复
int *p=(int *)5
arong1234 2009-12-20
  • 打赏
  • 举报
回复
这完全就是瞎说,前者失败是因为5不是地址,而后者没有报错是因为"se"本身就是地址。字符串是特殊得,它是以\0结尾得字符数组,因为它是数组,因此它是“地址”兼容得

[Quote=引用 2 楼 jackyjkchen 的回复:]
*p=5是赋值地址,*s = "se"才是赋值内容,会自动分配一个地址
[/Quote]
  • 打赏
  • 举报
回复
楼主,请补基础!
macrojj 2009-12-20
  • 打赏
  • 举报
回复
后者多了开辟空间这一步。
东大坡居士 2009-12-20
  • 打赏
  • 举报
回复
顶五楼~~
lutiesheng 2009-12-20
  • 打赏
  • 举报
回复
一楼正解
小魔菇 2009-12-20
  • 打赏
  • 举报
回复
顶2楼
xuhaihua046 2009-12-20
  • 打赏
  • 举报
回复
二楼正解
z569362161 2009-12-20
  • 打赏
  • 举报
回复
int *p=5 //错误.定义的指针应该指向地址.

//int *p=&a;应该这个样子地,int a=5;

char *s="se"//可以.这是C语言里字符串指针定义方法.
sageking2 2009-12-20
  • 打赏
  • 举报
回复
这样:int *p=(int *)5;
shanguianti 2009-12-20
  • 打赏
  • 举报
回复
1#楼说的对,Int *p=5是直接把地址单元编号为5的地址赋于p,地址编号为5的内存单元一般是系统所占用的,因此这样赋值通常会出错。而char *s=“se”,s将指向字符串的首地址,字符串在定义时系统会自动开辟一段内存空间,这段内存空间不会是系统自己占用的空间,因此第二个赋值不会出错。
jackyjkchen 2009-12-20
  • 打赏
  • 举报
回复
*p=5是赋值地址,*s = "se"才是赋值内容,会自动分配一个地址
diablox0147 2009-12-20
  • 打赏
  • 举报
回复
因为*p=5你直接把指针的值赋予5,也就是说p指向5这个地址
而*s = "se"所做的动作比*p=5多几步,那就是自动在常量区开辟一个空间然后放入"se\0"之后把放这几个东西的地址返回给*s,
所以这2个不同
weinikuaile 2009-12-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 diablox0147 的回复:]
因为*p=5你直接把指针的值赋予5,也就是说p指向5这个地址
而*s = "se"所做的动作比*p=5多几步,那就是自动在常量区开辟一个空间然后放入"se\0"之后把放这几个东西的地址返回给*s,
所以这2个不同
[/Quote]

int *p=5;等价于int *p,p=5;
char *s="sa";等价于 char *s,s="sa";
starshift 2009-12-20
  • 打赏
  • 举报
回复
int *p=(int *)5
编译不会报错,能运行起来才怪。
selooloo 2009-12-20
  • 打赏
  • 举报
回复
5 是int 型常量,p 是int *;类型不匹配

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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