购物车0种商品
IC邮购网-IC电子元件采购商城
指针啊指针问题。
(2011/10/13 9:59:00)
问题:
1、int*p=NULL;
*p=100;
NULL是一个宏定义,定义如下:#defineNULL0
我这样理解:第一句句的意思是定义指针变量p,p指向0x0000这个地址,第二句的意思为给0x0000这个地址赋值为100
2、假如我现在想让p指向0x0010这个地址并赋值为100,为什么我这样写会出错:
int *p=0x0010; *p=100;

但改成如下int *p=(int *)(0x0010);*p=100;这样编译后测试正确。

从道理上讲,int *p=0x0010;应该也是可以的把?为什么写成NULL就可以,写成0x0010就不行?!

网友评论:
回19楼。加上* const p试试。C51 正确。

void main()
{
int data *constp=0x0010;
*p=100;

while(1);
}


有书上讲。《C语言详解》指针部分。
冷漠 发表于 2009-8-19 17:47
------------------------------------------------

经过测试,编译通不过,测试的编译器是PICC和IAR,都提示错误。

网友评论:CONST只表示是一个不变化的常量,但没有规定是否一定放在ROM区,也可以放到RAM区的。

网友评论:

书上(关于ANSIC)讲得很清楚了: --摘自《C语言详解》P256指针初始化
......
指针对象一般不要初始化为除0之外的(注意包括除NULL之外的--冷漠注)其它整数值(直接量),例如,一般不要使用说明:
int *pi=10000; // 冷漠注:如若允许,那么 int *pi=10001; 也被允许?--不在整数边界。
因为从10000号地址开始的若干个字节中并不一定刚好就分配给一整数对象。但也有一些特殊情况除外,比如要存取某个存储单元的内容时。(冷漠注:存取某个(单个)存储单元....)
.............
为安全起见,在说明一个指针对象时最好将它初始化为一个确定的值。如果在说明它时还不能确定它所指向的是哪个对象或函数,那么可以把它初始化为NULL(即0)。例如:
longint *pli=NULL; // 终于找到出处了。--冷漠注。

在说明全局指针变量(extern)和静态指针对象(static)时,若未带初始化部分,则这些指针对象的值均被(编译器)初始化为NULL。但对于局部指针对象,在说明时若未带初始化部分,则该指针对象的值是不确定的,即必须在说明时显式指明其初值,其后再具有确定的值。

一个指针的取值范围应为机器所有可用内存的地址,但并不是所有内存地址都可以作为任一指针变量的值。(注意这里的概念。--冷漠)。指针对象的值 必须是属于该指针变量指向对象的类型的某个对象的地址。例如:一个指向整数类型的指针值不得是分配给一个浮点类型对象的内存单元的首地址。(所以LZ必须指明0x0010这个首地址属于何种(存取)对象类型。--冷漠)。
因此,指针变量可取的值是随着实现的不同、执行的不同而有所不同。

每一种类型的指针变量都有一个特殊的值NULL。NULL是一个定义在头文件stddef.h中的宏,用于定义一个空指针。空指针表示指针不指向任何位置(而不是LZ 理解的指向0地址。)NULL实际上是一个整数常量,其值为零(理解为空值)。NULL值是有别于指向具体对象的指针值的特殊值(空指针标识符)。

——以上摘自《C语言详解》


至此概念讲的已经很清楚了。若要说明一个指针初值,先要有一个具体类型的对象(以指向)。例如:
inta; //对象说明在先。
int*ptr=&a; //指针初始化在后。

但是如若在指针说明时还没有任何对象所指向,--像LZ那样,那么可以初始为空值,即:
int*ptr=NULL; // 并非指向0地址。NULL是不能作为实际指针使用的空指针值。
如若希望像LZ那样把RAM地址0x0010 说明为指向int变量的指针,则可以在初始化之后,在程序中定义:
ptr=(int *)0x0010;
或者在说明初值时,指明(未来对象)地址类型:int *ptr =(int *)0x0010; // C51int data *ptr =0x0010;已经足够信息。

网友评论:严格按照规则的写法:

#include <stddef.h>

void main()
{
int data *p=NULL;
p=(int data *)0x0010;

*p=100;
while(1);
}

应该在所有编译器下通过。

网友评论:好贴

浏览:(620)| 评论( 0 )
博文评论

  • 昵 称:
  • 内 容:10~250个字符
  • 验证码: 验证码看不清楚?请点击刷新验证码
  •                      
  • 博文分类

    热点博文

    最新博文

    最新评论

    IC电子元件查询
    IC邮购网电子元件品质保障