C语言教材第10章指针学习资料.ppt
第十章指针一、概念存储单元的地址:微机以字节为存储单元,每个字节有唯一地址。变量地址:一个变量占用若干个存储单元(int4字节,char1字节),变量地址为变量占用空间的首字节地址。变量的值:变量对应存储空间所存储的数据。指针:变量地址的别称。指针变量:存储指针(其他变量的地址)的变量。例:内存单元的地址与内容的区别voidmain(){inta=10,b[4];printf(“a的地址(10进制):%d\n”,a);printf(“b的地址(10进制):%d\n”,b);//b==b[0]printf(“b[1]的地址(10进制):%d\n”,b[1]);printf(“a的地址(16进制):%x\n”,a);printf(“b的地址(16进制):%x\n”,b);//b==b[0]printf(“b[1]的地址(16进制):%x\n”,b[1]);}运行结果:a的地址(10进制):1310588b的地址(10进制):1310572b[1]的地址(10进制):1310576a的地址(16进制):13ff7cb的地址(16进制):13ff6cb[1]的地址(16进制):13ff70第十章指针1.指针变量的定义、引用和初始化指针变量是一种存放内存地址的变量。一般的定义形式为: 基类型*指针变量名例:intvar=10;int*pointer=var;floatf;int*p=f;//错误,int*与float*不匹配 其中int*为类型名,pointer和p为变量名。inta,b,*p1,*p2;//注意,*p2不是变量名p1=NULL;//在头文件stdio.h中,#defineNULL0或p1=0;10pointer12ff78var12ff7c12ff7c 2.与指针变量有关的运算符取地址运算符 :单目运算符,右结合返回其右边变量的地址。例如,int*p1,*p2,a=5,b[10];p1=a;p2=b;p2=b[0];指向运算符*:单目运算,右结合返回其右边指针变量所指的变量。例如,p1=a;*p1=10;*p1此时就是a,*p1可以像一般整型变量使用。p2=b[1];*p2=*p1+2;*a等价于a,*p1等价于a例子:输入两个整数,按先大后小的顺序输出。#includestdio.hvoidmain(){int*p1,*p2,*p,a,b;printf(“输入任意两个整数:“);scanf(“%d%d”,a,b);p1=a;p2=b;if(ab){p=p1;p1=p2;p2=p;}printf(“a=%db=%d\n”,a,b);printf(“max=%dmin=%d\n”,*p1,*p2);}运行结果:输入任意两个整数::35a=3b=5max=5min=3a3p1ab5p2bb3p1aa5p2b赋值运算符=把指针常量或另一个同类型的指针变量赋给指针变量。例如,inta,*p1,*p2=0;p1=a;p2=p1;p=10//错误,其中地址常量只能是0(NULL)。a=p1;//错误,地址不能赋