1
本章概要
指针的基本概念
指针变量的定义和赋值
指针变量的使用
指针与数组
指向指针的指针
指针与结构
指针与函数
2
第7章指针
指针在C语言中占有重要的地位,是最具有特色的语言成分,是C语言的精华。正确而灵活地使用它,可以有效地表示复杂的数据结构;能动态分配内存;直接处理内存地址;对内存中各种不同的数据结构进行快速处理,也为函数间各类数据的传递提供了简捷便利的方法。使用指针,可以编制出简洁明快、功能强和质量高的程序。
3
main( )
{
int a=1;
float b=2;
int c[2]={5, 6};
char d=’d’;
}
一个程序片段
变量a
变量b
变量d
数组c
5
00000000H
00000001H
00000002H
00000003H
00000004H
00000005H
1
00000006H
00000007H
00000008H
00000009H
…...
6
0000000AH
00000009H
‘d’
2
指针的基本概念
图 7-1 程序和内存示意图
4
变量名
变量的地址
存放变量的内存单元
00000000H
00000001H
1
变量的值
图 7-2 变量a的局部示意图
注:变量的地址是二进制的,为了便于书写而在这里写成对应的十六进制形式。等读者熟悉后在以后的章节中则会直接用十进制来书写,以便于阅读。
指针的基本概念
a
5
要访问变量首先就要知道变量的地址,可是通过数字形式的地址值访问变量,显然是不方便的(正如使用URL网址、域名比IP地址要方便):
不便于书写和记忆,而且数字本身没有什么具体的字面意义。
需要了解硬件细节。比如当前哪些内存空间是空闲的等等。
这就失去了高级语言容易使用、接近人类语言的优点。
指针的基本概念
6
指针的基本概念
好在C语言提供了变量名,程序员通过变量名来访问变量,不需要知道变量的存储单元是如何开辟在内存的空闲区的,也不需要关心变量的实际存放地址。变量名和变量的地址之间由编译器和操作系统进行联系和转换(最终当然还是要通过地址对变量进行访问),这个转换过程对程序员来说是透明的。
7
指针的基本概念
这样做显然是有好处的:
变量名比地址好记而且可以表文达意,提高了程序的书写性和可读性;
普通程序员可以把更多的精力放在程序的逻辑实现上而不需要过分关注计算机硬件系统的有关细节。
这些也正是高级语言的优点之表现。
注意:常量是没有地址的。(以后通过对汇编语言的学****我们可以了解到常量的存储)。
8
什么是指针呢?指针其实就是地址!既然变量名比变量地址使用起来方便,那么为什么还要引入指针呢?这是因为指针可以给我们的程序带来意想不到的灵活度,随着本章的深入学****您一定会体会到这句话的!
指针的基本概念
9
“指针就是地址”,因此对指针的认识要建立在对地址的深刻理解之上。地址有两个方面的含义。
地址值(也就是内存单元的编址)。
是什么类型的数据的地址。这就存在着一个跨度也就是存储空间大小的问题。(我们已经知道,不同的数据类型其占据内存空间的大小是不同的。比如对于一个int变量的地址,应该是内存中某2个连续字节单元的首地址;如果是一个float变量的地址,那么该指针应该是内存中某4个连续字节单元的首地址)。
指针的基本概念
10
明白指针就是地址,这一点十分重要。多数情况下,这个地址是内存中另一个变量的位置。如果一个变量包含了另一个变量的地址,那么第1个变量就是个指针变量而且说它是“指向”第2个变量的,“指针”由此而得其名。例如,如果在地址为1000的变量指向地址为1004的变量,那么也就是说地址为1000的这个变量的值是1004。
指针的基本概念
第07章 指针黑体 来自淘豆网www.taodocs.com转载请标明出处.