内容正文:
*
《C语言程序设计教程》
(第二版)
《C语言程序设计教程》(第二版)
第7章 指针
本章要点:
◆ 了解指针和指针变量的基本概念
◆ 掌握指针变量的定义和引用方法
◆ 掌握数组的指针和指向数组的指针变量
◆ 掌握函数的指针和指向函数的指针变量
◆ 掌握指针数组和指向指针的指针概念
*
《C语言程序设计教程》(第二版)
第7章 指针
目 录
7.1 指针的概念
7.2 指针变量
7.3 指针与数组
7.4 指针与函数
7.5 返回指针值的函数
7.6 指针数组和指向指针的指针
*
《C语言程序设计教程》(第二版)
7.1 指针的概念
在计算机中,所有的数据都是存放在存储器中的。不同的数据类型所占用的内存单元数不等,为了正确地访问这些内存单元,必须为每个内存单元编号。根据一个内存单元的编号即可准确地找到该内存单元,内存单元的编号称为地址。
说明一个变量后,编译器将划分出若干存储器单元来存储该变量。编译器将这个存储单元地址与变量名联系起来,程序引用这个变量名时,系统就访问相应的存储单元。
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
100
value
《C语言程序设计教程》(第二版)
7.1 指针的概念
内存单元的编号或地址称为指针。C语言中允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
例如定义p_value用来存放value的地址,如上图所示。因为p_value包含变量value的地址,所以它指向value在存储器中的存储单元,也就是说,p_value是指向value的,一般把它称作value的一个指针,如下图所示。
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
100 1002
value
p_value
《C语言程序设计教程》(第二版)
7.2 指针变量
7.2.1 指针变量的定义及赋值
1. 指针变量的定义
定义指针变量的格式
类型说明符 *变量名;
其中,类型名说明指针变量所指向变量的类型;星号(*)说明所定义的变量是一个指针变量。
指针变量可与非指针变量一起说明,例如:
char *p_char;
float * p_value,percent;
注意:*p_char说明了p_char是一个指针变量,指针变量名为p_char,而不是*p_char。
《C语言程序设计教程》(第二版)
7.2 指针变量
7.2.1 指针变量的定义及赋值
2. 指针变量的赋值
1)指针变量初始化
2)用赋值语句给指针变量赋值
指针变量的赋值只能赋予地址,而不能赋予任何其它数据,否则将引起错误。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。
在定义指针变量同时,可以把另一变量的地址赋值给指针变量,即指针变量的初始化。
例如:
int a; int *p=&a;
int a, *p; p=&a;
《C语言程序设计教程》(第二版)
7.2 指针变量
7.2.1 指针变量的定义及赋值
3)说明:
(1)上例赋值语句中右边的符号“&”为取地址运算符,当取地址运算符“&”放在一个变量名之前时,它返回该变量在内存中的首地址。
(2)不允许把一个数赋予指针变量,故下面的赋值是错误的:
p_value=1002;
应该使用取地址运算符“&”把一个地址赋给指针变量。如:
p_value=&value;
2. 指针变量的赋值
《C语言程序设计教程》(第二版)
7.2 指针变量
7.2.1 指针变量的定义及赋值
3)说明:
(3)使用未初始化的指针变量虽不会引起编译出错,但可能导致无法预料的后果。指针变量在保存一个变量的地址之前是不起作用的。
(4)一个指针变量只能指向同一个类型的变量,必须在定义时规定指针变量所指向变