- 1、本文档共55页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文档全是精心选出来的精品资料,绝对值得下载!
第8章 指 针
指针是C语言的灵魂与精华
指针可有效地表示出各种复杂的数据结构
指针能方便地使用数组和字符串
指针能在多个函数之间有效地共享内存空间
正确理解和灵活使用指针是掌握C语言重要标志
8.1 指针概述
计算机运行过程中,所有的数据存放在内存中
内存中的一个或相邻的多个字节称为一个内存单元
内存单元的大小取决于所存储的数
据类型
按字节对内存进行编址,每8位数
据拥有一个内存地址。
内存地址:每个字节在内存中的编号
8.1 指针概述
字符型变量ch占1个字节
变量ch内存单元的地址为1008H
float型变量f占4个字节
变量 f 内存单元的地址为所占用4个字节中的最低端字节地址,即2000H
8.1.1 指针的概念
内存单元地址 = 指针
内存单元地址 ≠ 内存单元内容
可用一个变量来存放指针,称为指针变量
一个指针变量的值就是某个内存单元的地址
8.1.1 指针的概念
ch -- 字符型变量,其内容为’B’
p -- 字符型指针变量,其内容为104BH(地址)
则p指向变量ch,或p是指向变量ch的指针
8.1.1 指针的概念
变量的指针就是变量的地址
存放指针的变量称为指针变量。
如何表示指针变量和它所指向的变量之间的关系?
“*”符号表示“指向”,若pointer是一个指针变量,*pointer表示pointer所指向的变量
假设有:
int i; int *pointer;
pointer=i; /* 让指针变量pointer指向变量i */
则,以下语句的作用相同:
i=3; *pointer=3;
8.1.1 指针的概念
指针是地址,是常量
指针变量可被赋予不同的指针值,是变量
常把指针变量简称为指针。
约定:
“指针”是指地址,是常量,
“指针变量”是指取值为地址的变量
8.1.1 指针的概念
指针变量的值是地址
可以是变量地址,也可以是其它数据结构的地址
指针变量中存放数组首地址
指针变量中存放函数的首地址
8.1.2 指针变量的定义
对指针变量的定义包括三个内容:
基类型,即被指变量的数据类型
指针类型说明符,即“*”,它说明定义的变量为一个指针变量
指针变量名,其取名规则同普通变量名
一般形式:
基类型 *指针变量名;
例如:
int *p1; // p1指向一个整型变量
float *p3; // p3是指向浮点型数据的指针变量
char *p4; // p4是指向字符型数据的指针变量
8.1.2 指针变量的定义
注意
一个指针变量只能指向与其基类型相同类型的数据
8.1.3 指针变量的引用
指针有关的运算符:
:取地址运算符。
* :指针运算符(或称“间接访问”运算符)
运算符“”和“*”可看作一对互逆的运算符。即,当两个运算符出现在一起时,可以相互抵消。
8.1.3 指针变量的引用
若有指向整型变量的指针变量p,整型变量a
(1)定义指针变量时对其初始化
int a;
int *p=a;
(2)先定义指针变量,后对其赋值
int a;
int *p;
p=a;
不可将一个具体的常数赋予指针变量
int *p;
p=1000;
×
8.1.3 指针变量的引用
假设有:
int i=123, x;
int *ip;
ip = i;
可以通过指针变量ip间接访问变量i
x = *ip;
等价于
x = i;
8.1.3 指针变量的引用
假设:
int i, j, *p1, *p2;
i = a; j = b;
p1 = i; p2 = j;
若有:
p2 = p1;
8.1.3 指针变量的引用
假设:
int i, j, *p1, *p2;
i = a; j = b;
p1 = i; p2 = j;
若有:
*p2 = *p1;
8.1.3 指针变量的引用
指针变量也可以出现在表达式中
int x, y,*px=x; //变量px指向整型变量x
y=*px+5; // x加5赋给y,x的内容不变
y=++*px; // x的内容加1,后将x赋给y
// ++*px; 相当于++(*px);
y=*px++; // 相当于y=*px; px++;
#include stdio.h
void main()
{
int a, b;
int *pointer1, *pointer2;
a=100; b=10;
pointer1=a;
pointer2=b;
printf(%d
文档评论(0)