当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [原创]C语言指针 非权威教程
帖子发表于 : 2008-05-07 13:02 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
程序运行时,数据储存在储存器(内存、硬盘和中央处理器寄存器),大部分时候,程序相关数据都
存储在内存。


“内存块储存变量 int a = 1 的”可以简单具体为:
代码:
+------+
|  1   |    变量的值
+------+
|  a   |    变量的名称
+------+
| 0001 |    变量在内存中的地址
+------+



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



!!为了讲解重点,下面省略了变量名称 a 和地址的对应关系。
代码:
+---------+
|    1    |    变量的值
+---------+
| 0001(a) |    变量在内存中的地址
+---------+



要改变变量 a 的值为 2,可以使用:
代码:
a = 2;


代码:
+---------+
|    2    |    变量的值
+---------+
| 0001(a) |    变量在内存中的地址
+---------+



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

对应地,通过变量 a 地址来访问变量 a 的值称为“间接访问”。


声明一个变量用于储存另一个变量的地址:
代码:
int *a_p;


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


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


变量 a 前加一个德尔塔符表示寻找它的地址出来,德尔塔符又称为“寻地址符”。
代码:
+---------+      +-----------+
|    2    |      |    0001   |   变量的值
+---------+  ... +-----------+
| 0001(a) |      | 0100(a_p) |   变量在内存中的地址
+---------+      +-----------+



通过变量 a 的地址来访问变量 a 的值:
代码:
printf(" a = %d ", *a_p);


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


特别要注意,声明 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_p 前加星号表示修改“ a_p 所储存的地址对应的变量”的值,而不是变量 a_p 自身的值 0001。


有了基础后,可以马上细品《The C Programming Language,Second Edition》中指针一章,深入学习指针。


参考文献
《The C Programming Language,Second Edition》,Brian W. Kernighan & Dennis M. Ritchie 著
《Expert C Programming:Deep C Secrets》,Peter Van Der Linden 著

/*
*
* Power by shuge.org & lee
*
* Last Modified: 2008-05-07
*
*/


_________________
http://lee.youxu.info/


最后由 flyinflash 编辑于 2008-05-09 22:42,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-05-07 18:57 
头像

注册: 2006-03-25 10:36
帖子: 1233
送出感谢: 0 次
接收感谢: 0 次
楼主辛苦了,简洁,但太简洁了。


_________________
让自由的声音传传传传传传传传天下。。。
Spread the words of freedom.


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-05-07 21:48 
头像

注册: 2005-09-27 18:24
帖子: 498
地址: 杭州
送出感谢: 0 次
接收感谢: 0 次
的确太简洁了点


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-05-07 21:53 
头像

注册: 2007-04-25 13:12
帖子: 2838
送出感谢: 0 次
接收感谢: 0 次
入门不错


_________________
♜♞♝♛♚♝♞♜
♟♟♟♟♟♟♟♟
♙♙♙♙♙♙♙♙
♖♘♗♕♔♗♘♖

☠☯⚔⚓☣☦☃☕
☹☻☪☭☬⚖⚛⚜
ℜℳℬ™ ℋℯℓ℘ ℳℭ
sƂɐʍ рǀɹoʍ əɥʇ oS


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-05-09 18:42 
头像

注册: 2006-09-10 8:19
帖子: 508
地址: Shanghai,China
系统: Gentoo/Mac OS X
送出感谢: 0 次
接收感谢: 0 次
看了一下,确实简洁,不错


_________________
http://pjq.me


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-05-09 18:57 

注册: 2008-04-01 12:28
帖子: 145
送出感谢: 0 次
接收感谢: 0 次
指针的奥秘可不只这一点
连皮毛都不算


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-05-09 22:32 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
引用:
有了基础后,可以马上细品《The C Programming Language,Second Edition》中指针一章,深入学习指针。


_________________
http://lee.youxu.info/


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-05-09 22:37 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
请不要试图进行恶意的抨击,
请您尝试了解和理解我想表达思想。


_________________
http://lee.youxu.info/


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译