内容发布更新时间 : 2024/11/15 18:41:33星期一 下面是文章的全部内容请认真阅读。
第八章 地址和指针
a p 1001 2001 2001 一、概念
03
10
1、计算机内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号(称为内存地址)
2、若在程序中定义了一个变量,系统就会根据变量的类型为其分配一定字节数的内存空间,这样变量的内存地址也就确定了,即为该变量所在存储单元的第一个字节地址。 3、程序中对变量的存取操作实际是对某个地址的存储单元进行操作,这里的存取方式有两种:
1)直接存取:直接按变量的地址来存取变量值的方式 2)间接存取:通过一个间接变量p来存放变量a的地址,这样我们要存取a先要找到p的地址,从中找出a的地址,然后再去访问由该地址所指向的存储单元。这里,我们把存放地址的变量p称为指针变量。
4、 说”指针变量p指向了变量a”的含义是指:指针变量p中存放了变量a的地址。 二、给指针变量赋值
一个指针变量可以通过不同的方式获得一个确定的地址值,从而指向一个具体的对象。
1、通过求地址运算符(&)获得地址值
1)单目运算符&用来求出运算对象的地址,以此可以把一个变量的地址赋给指针变量。如:
int k,*p,*q; p=&k; 即把变量k 的地址赋予了p, p
这时可以说p指向了k.
2)在调用scanf函数时,如果有q=&k;时,那么snf(%d”,&k)和scanf(“%d”,q)是等价的。 2、通过指针变量获得地址值
1)可以通过赋值运算把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针指向同一地址,如 p=q; 2)当进行赋值运算时,赋值号两边的指针变量的基类型必须相同。
3、通过标准函数获得地址值
即通过调用库函数malloc和calloc在内存中开辟动态存储单元,从而把该存储单元的地址赋给指针变量。 ﹡4、给指针变量赋“空”值
1)除了给指针变量赋地址值外,还可以给指针变量赋NULL值。 如:p=NULL;等价于p=’\\0’;或p=0; 2)在使用NULL时,应该在程序的前面加预定行:
#include
10k
NULL的值为0,当执行了以上的赋值语句后,称p为空指针。
在这里,指针p并不是指向地址为0的存储单元。 三、对指针变量的操作
1、通过指针来引用一个存储单元
间接访问运算符(间址运算符)“*”是单目运算符 1)int *p,i=10,j; p=&i;
则j=*p; j=i; j=*(&i); j=*&i; 2)*p=*p+1; 号不能少
如果写成*p++,则是先将*p作为表达式的值,然后使指针变量p本身加1,指向了下一个存储单元。
m=*p++; m=*p; p++; k=k+1; ++*p; (*p)++; 这里括
k l h j 100 p 3)若有以下定义: int **p,*s,k=20; s=&k; p=&s;
则变量p,s和k的关系可用下图表示: p s k 30 200 300 400