CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一个关于指针的疑问

楼主gemo(欧尼迪巴戈)2006-03-03 19:17:26 在 C/C++ / C语言 提问

我们可以写:char   *p="abc";  
  谁也没觉得有什么不对  
   
  可是如果写:int   *p=(int   *)1;呢?  
   
  1和"abc"都是常量吧?"abc"表示地址,把1转成地址了还是不行? 问题点数:20、回复次数:5Top

1 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2006-03-03 19:21:50 得分 0

int   *p=(int*)1;在语法上是没有错误的,但两者有一个根本性的区别,"abc"是一个实际并且被定义的对象,一个合法的对象,而(int*)1并没有产生对象,也就是说int   *p=(int*)1;运行之后,p所指向的是一个非法对象,一个没有被实际定义的对象。Top

2 楼casazaft()回复于 2006-03-03 19:55:45 得分 0

很简单   char   *p="abc"  
  汇编代码可能是  
  对于字符窜"abc"   可能会如下处理  
  temp   db   'a','b','c'  
  在内存中分配了一个相当于temp的变量,实际会是一个内存地址,比如[1234h]  
  *p也会分配到一个地址,比如可能是[1500h],并且在这个地址的内存里写入1234h,完成了“指针“的生成和指向  
  而int   *p=(int   *)1会依据优先级,首先对等号右边的括号进行运算,试图分配一个地址来做指针,并在这个地址里存入1的地址----然而1实际保存在寄存器中,不出现在内存里,无法完成取指操作,必然出错  
  Top

3 楼Tiwen818(Tiwen)回复于 2006-03-03 21:09:56 得分 0

"abc"在编译的过程中已经分配好地址存储。是合法对象。Top

4 楼hai_li(何家干)回复于 2006-03-03 23:31:15 得分 0

"abc"是一个字符串常量,代表地址,在内存的全局变量区中有它的存储位置,所以可以这样。  
  1是数组常量,在内存中没有它的空间Top

5 楼tramp0515()回复于 2006-03-05 04:43:01 得分 0

同意楼上的朋友~Top

相关问题

  • c++指针小疑问?
  • c指针小疑问?
  • 指针数组的疑问
  • 初学指针的疑问???
  • 疑问:关于引用型指针
  • 关于指针被delete后的疑问?
  • 关于指针的一点疑问
  • 一个关于指针的疑问?
  • 急!!关于派生类指针和基类指针的疑问?????
  • 关于指针的指针和二维数组的疑问

关键词

  • 指针
  • 内存
  • 地址
  • 常量
  • 对象
  • abc
  • 分配
  • 实际

得分解答快速导航

  • 帖主:gemo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo