指针 一

6.1名字与内存:高级语言特性之一就是通过名字而不是地址来访问内存位置,名字就是我们所称的变量,名字与内存之间的关联并不是由硬件所提供,它是由编译器为我们实现的。

6.2 未初始化和非法指针:

       下面这个代码段说明了一个极其常见的错误:

       int*a;

       *a= 12;

       这里声明创建了一个名叫a的指针变量,后面那条语句把12存储在a所指向的内存位置。

【警告】:但是究竟a指向哪里了?我们声明了这个变量,但为对它进行初始化,所以我们没办法预计12存储在哪里。

【错误报告】:在unix系统上,这个错误称为“段违例(segmentation voilation)”或“内存错误(memory fault)”。在windows系统上,这个错误提示是:保护性异常(General Protection Exception)。

6.3 NULL指针:

1.表示不指向任何东西。要想一个指针变量为NULL,你可以给它赋一个零值。

2.对NULL指针进行解引用操作时非法的。

6.4 左值(L-value)和右值(R-value):左值就是出现在赋值符号左边的东西。右值就是出现在赋值符号右边的东西。指针可以作为左值,并不是因为它是指针,而是因为它是变量。

6.5 指针常量:

    *100 = 12;//这条语句是非法的,因为100是整型,间接访问必须是指针类型的表达式。

       如果想实现25存储于位置100. 必须强制类型转换:

       *(int *)100 = 25;

6.6 指针的指针:

       int a = 12;

       int *b = &a;

       int **c = &b;

       它们在内存的模型如下:

      

 

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值