注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

饥民2011

一直在搬砖

 
 
 

日志

 
 
 
 

[转载]C语言指针 非权威入门教程  

2011-11-22 22:59:59|  分类: c/c++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

程序运行时,数据储存在储存器(内存、硬盘和中央处理器寄存器),大部分时候,程序相关数据都存储在内存。

"内存块存储变量int a = 1"  可以简单地用内存图表达:


存储的值  内存的位置     注释

+------+
|  1   |  0001        变量的值
+------+
|  a   |  0002        变量的名称
+------+
| 0001 |  0003        变量在内存中的地址
+------+

像 int a = 1 这种赋值定义后,变量的值,变量的名称和变量的地址都是一一对应的,所以,只要知道变量的名称或地址就能知道变量的值




!!为了讲解重点,下面省略了变量名称 a 和地址的对应关系。

姐系甘:

+---------+
|    1    |    0001   变量的值
+---------+
| 0001(a) |    0002   变量在内存中的地址
+---------+

 

要改变变量 a 的值为 2,可以使用:

a = 2;

跟住就变成甘:

+---------+
|   2     |    0001   变量的值变成2
+---------+
| 0001(a) |    0002   变量在内存中的地址(不变)
+---------+


通过标识符 a 来访问变量 a 的值称为“直接访问”。

相对来讲,通过变量 a 地址来访问变量 a 的值称为“间接访问”。就系下面要讲果d

 

声明一个变量用于储存另一个变量的地址:

代码:
int *a_p;

 

变量 a_p 前有一个“*”号表示它是一种特殊变量,只能储存 int 类型变量的地址。

把变量 int a 的地址储存到变量 a_p:
代码:
a_p = &a;

呢个时候,变量a_p就成为了变量a的指针啦

变量 a 前加一个"&“表示寻找它的地址出来,德尔塔符又称为“寻地址符”。

+---------+
|   1     |    0001   变量a的值(或者&a_p的值)
+---------+
| 0001    |    0002   变量a在内存中的地址
+---------+

+---------+
|  0001   |    0003   变量a_p的值(指针的值)
+---------+
|  0003   |    0004   变量
a_p在内存中的地址
+---------+

 

通过变量 a 的地址来访问变量 a 的值:

代码:
printf(" a = %d ", *a_p);

好明显,结果系 a =2

变量 a_p 前加一个“*”表示把它的储存的地址 0001 所对应的值寻找出来。由于这时的“*”表示“寻找某地址对应的值”,它被称为“取值符”。


代码:

printf(" a = %d ", a_p);

结果系 a = 0001  (a的地址)

 

关键来了,好多人会搞乱
代码:

printf(" a = %d ", &a_p);

结果系 a = 0003  (a_p的地址)

 

代码:

printf(" a = %d ", *a);

结果系编译出错~ a不是特殊的指针变量~



特别要注意,声明 int *a_p 与 printf(" a = %d ", *a_p) 中的星号名称和作用都不一样,前者
表示“a_p 是一种特殊变量,只能储存 int 类型变量的地址”,后者表示“寻找 a_p 所储存的地址
对应的值”。


通过变量 a 的地址改变变量 a 的值:

代码:
*a_p = 4;
printf(" a = %d ", *a_p);
printf(" a = %d ", a);
结果系 a = 4  a = 4


转自ubuntu论坛,无错 其实系写比我自己睇既,泪流满面~~~


  评论这张
 
阅读(80)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018