湖南工业大学C语言复习第八章 地址和指针

第八章 地址和指针

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

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4