- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 地址和指针
8.1 变量的地址和指针
8.2 指针变量的定义和指针变量的基类型
8.3 给指针变量赋值
8.4 对指针变量的操作
8.5 函数之间地址值的传递
考试的重点
8.1 变量的地址和指针
计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个
编号,这个编号就成为内存地址。
内存空间
地址
1010
1011
1012
1013
1014
1015
1016
:
:
:
:
1200
1201
1202
1203
1204
1205
例如:short a,b;
float x;
a=3;b=5;x=3.5;
:
:
:
:
2002
2003
2004
2005
a
b
x
3
5
3.5
每个变量的地址是指该变量所占
存储单元的第一个字节的地址。
在C语言中,我们可以定义整型变量、实型变量、字符变量。
他们都是用来存放数据的。
今天,我们来学习一下特殊的变量,这种变量只是用来存放
内存地址的。
比如我们定义了一个指针变量p
p
占4个字节
该变量中只能存放内存地址,比如把变量a的地址赋予指针
变量p,则指针变量p的值为1012。
1012
请问
当访问变量a时,访问的是什么?
当访问指针变量p时,访问的是什么?
3
1012
当访问变量时,为“直接存取(直接访问)”。
我们也可以通过指针变量间接的访问该地址中原来的值。此时
称为“间接存取(间接访问)”。
8.2 指针变量的定义和指针变量的基类型
定义指针变量的一般形式如下:
类型名 *指针变量名;
或
类型名 *指针变量名1, *指针变量名2,……;
例如:int *pi;
int *pj,*pa;
1. pi,pj,pa都是变量,不过都是指针变量,定义时在普通变量名的左边加上星号就行了。
说明:
pi,pj,pa三个指针变量的类型为整型,说明三个变量中只能存放int类型变量的地址。
这时我们称int是指针变量pi,pj,pa的基类型。
如:double *pd;
char *s1,*s2;
pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址。
s1和s2的基类型为char类型,在指针变量s1和s2中,只能存放char类型变量的地址。
8.3 给指针变量赋值
8.3.1 给指针变量赋地址值
例如:int k,*q,*p;
/*k为整型变量,q和p都是指针变量。*/
q
p
k
k=1;
/*给普通变量赋值*/
整型变量k只被能赋予整型值,赋值时直接赋值就可以
了,而指针变量只能被赋予地址值,如下是把整型变
量k的地址赋值给指针变量q。
q=k;
是用来求出变量的地址。
1
k
知识点:
由于把变量k的地址赋予了指针变量q,q中现在存放的就是变量k的地址,
这时可以说:q指向了变量k。
指针变量之间也可以进行赋值:p=q;
k
当我们输出变量k,q,p时,输出的结果为;
1
1245052
1245052
8.3 给指针变量赋值
8.3.2 给指针变量赋“空”值
除了给指针变量赋地址值之外,还可以给指针变量赋一个特殊的值,该值为“空”值。
int *p;
p=NULL;
int *p;
p=0;
int *p;
p=‘\0’;
注意
此时,指针变量p中不是没有值,而是有一个“空”值。
8.4 对指针变量的操作
8.4.1 通过指针来引用一个存储单元
#include stdio.h
main()
{int k,*q,*p;
k=1;
q=k;
p=q;
printf(“%d\n%d\n%d\n,k,q,p);
}
1
1245052
1245052
输出时,变量k为1,而指针变量q和p则为变量k的地址。
#include stdio.h
main()
{int k,*q,*p;
k=1;
q=k;
p=q;
printf(“%d\n%d\n%d\n,k,*q,*p);
}
1
k
k
q
k
p
1
1
1
访问时,在指针变量前在*(间接访问运算符)则
表示访问该地址中原来的值。
8.4 对指针变量的操作
8.4.1 通过指针来引用一个存储单元
假定有以下定义和语句:
int *p,i=10,j;
p=i;
j=*p;
/*定义了三个变量*/
/*取变量i的地址赋给指针变量p*/
/*间接访问指针变量中的值10赋给变量j*/
p
10
i
j
10
j=i;
间接访问运算符*是一个单目运算符,必须出现在运算对象的左边。其运算对象
可以是存放地址的指针变量,也可以是地址。
j=*(i);
j=*i;
扩展知识:
j=*p+1;
10
j
11
j
in
文档评论(0)