C语言程序设计(第七章 指针)
一、指针是什么
由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化地称为“指针”。意思就是通过它能找到以它为地址的内存单元。
假如有输入语句:
scanf("%d",&x);
k=x+y;
这种直接按变量名进行的访问,称为**“直接访问”**方式
还可以采用**“间接访问”**的方式,即将变量i的地址存放在另一个变量中,然后通过该变量来找到变量i的地址,从而访问i变量。
i_pointer=&i
(1)将3直接送到变量i所标识的单元中,例如“i=3”。
(2)将3送到变量i_pointer所指向的单元(即变量i的存储单元),例如“* i_pointer=3;”,其中* i_pointer表示i_pointer指向的对象。
指向就是通过地址来体现的,由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元(如同说,一个房间号指向一个房间一样),将地址形象化地称为“指针”。
如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为“指针变量”,指针变量就是地址变量,用来存放地址,指针变量的值是指针。
二、指针变量
1、使用指针变量的例子
例题1:通过指针变量访问整型变量
#include<stdio.h>
int main(){
int a=100,b=200; //定义整型变量a,b,并初始化
int * pa,* pb; //定义指向整形数据的指针变量pa,pb
pa=&a; //把变量a的地址赋给指针变量pa
pb=&b; //把变量b的地址赋给指针变量pb
printf("a=%d,b=%d\n",a,b); //输出变量a和b的值
printf("* pa=%d,* pb=%d\n",* pa,* pb); //输出变量a和b的值
return 0;
}
执行结果:
a=100,b=200
* pa=100,* pb=200
2、怎样定义指针变量
定义指针变量的一般形式为:
类型名 * 指针变量名
int *pa,*pb;
float * pc;
char * pd;
可以在定义指针变量时,同时对它初始化,如:
int * pa=&a,* pb=&b //定义指针变量pa,pb,并分别指向a,b
一个变量的指针的含义包括两个方面,一是以存储单元编号表示的纯地址,二是它指向的存储单元的数据类型(如 int,char,float等)。
指向整型数据的指针表示为“ int *”,读作“指向int的指针”或简称“int 指针”。
3、怎样引用指针变量
在引用指针变量时,可能有三种情况:
(1)给指针变量赋值,如:
p=&a //把a的地址赋给指针变量p
指针变量p的值是变量a的地址,p指向a
(2)引用指针变量指向的变量
如果已经执行(1)的操作,即指针变量p指向了整型变量a,则
printf("%d",* p);
其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。
如果有以下赋值语句:
* p=1;
表示将整数1赋给p当前所指向的变量,如果p指向变量a,则相当于把1赋给a,即”a=1“。
(3)引用指针变量的值,如
printf("%o"