
第7章指针 主讲教师:陈 勇 联系电话:13891934678 E-Mail:cy@nwsuaf.edu.cn 计算机应用教研室
计算机应用教研室 第7章 指针 主讲教师:陈 勇 联系电话:13891934678 E-Mail:cy@nwsuaf.edu.cn

本章内容 第 7.1指针基本概念 7.2指针变量的定义和初始化(P218-219) 章 7,3指针运算符及与之有关的运算 指 7,4指针和一维数组的关系 7.5指针变量作为函数参数的作用 7.6返回地址(指针)的函数 7.7指针数组 7,8动态申请存贮空间
第 7 章 指 针 本章内容 7.1 指针基本概念 7.2 指针变量的定义和初始化(P218-219) 7.3 指针运算符及与之有关的运算 7.4 指针和一维数组的关系 7.5 指针变量作为函数参数的作用 7.6 返回地址(指针)的函数 7.7 指针数组 7.8 动态申请存贮空间

7.1指针的基本概念 第 1.指针的实质就是地址,指针变量就是用于 存贮地址的变量。 章 2.指针的作用 (1)利用指针变量作函数参数,可以从函数 针 得到多个运算结果;(如以前的示例函数求 一组数中的最大值、最小值、平均值) (2)指针用于传递数组大大提高了系统的 效率; (3)支持动态分配内存空间,提高了内存 利用率;
第 7 章 指 针 7.1 指针的基本概念 1.指针的实质就是地址,指针变量就是用于 存贮地址的变量。 2.指针的作用 (1)利用指针变量作函数参数,可以从函数 得到多个运算结果;(如以前的示例函数求 一组数中的最大值、最小值、平均值) (2)指针用于传递数组大大提高了系统的 效率; (3)支持动态分配内存空间,提高了内存 利用率;

7.1指针的基本概念 3.地址的表现形式 第 (1)用指向地址的指针变量表示: 7章 (2)数组名本身就是该数组的首地址; (3)变量名、数组元素名前加取地址符“&, 韓
第 7 章 指 针 3.地址的表现形式 (1)用指向地址的指针变量表示; (2)数组名本身就是该数组的首地址; (3)变量名、数组元素名前加取地址符“&”; 7.1 指针的基本概念

7.3指针运算符及与之有关的运算 第 1.指针运算符 7章 &:取地址运算符 *:取值运算符,只能在地址前用 请预测以下程序运行结果: 针 main() int a=3,*p=&a; printf("%d n",a); printf("%d\n",*p) printf("%u\n",&a); printf("%u\n",p); printf ("%u\n",&p) getch();}
第 7 章 指 针 1. 指针运算符 &:取地址运算符 *:取值运算符,只能在地址前用 请预测以下程序运行结果: 7.3 指针运算符及与之有关的运算 main() { int a=3,*p=&a; printf("%d\n",a); printf("%d\n",*p); printf("%u\n",&a); printf("%u\n",p); printf("%u\n",&p); getch();}

7.3指针运算符及与之有关的运算 2.与指针有关的运算 第 (1)给指针变量赋值,例如intp=&a; 章 (2)一个指针变量加或减一个整型值n,得 到与之相隔n个存贮区域的新地址; 针 main() {inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a; printf("%u,%u n",a,p); printf("%u,%u n",&a[4],p+4); getch();
第 7 章 指 针 2.与指针有关的运算 (1)给指针变量赋值,例如int *p=&a; (2)一个指针变量加或减一个整型值n,得 到与之相隔n个存贮区域的新地址; 7.3 指针运算符及与之有关的运算 main() { int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a; printf("%u,%u\n",a,p); printf("%u,%u\n",&a[4],p+4); getch(); }

7.3指针运算符及与之有关的运算 2.与指针有关的运算 第 (3)一个指针变量可以做自加或自减运算; 章 结果是将这个指针变量指向下一个(+)或 指 上一个(-)存贮区域首地址。 main() {f1oata[10]={0,2,4,6,8,10,12,14,16,18},*p=a; printf("%g n",*p); printf("%g n",*(++p)); printf("%g n",*p--); printf("%g\n",++(*p)); getch();
第 7 章 指 针 2.与指针有关的运算 (3)一个指针变量可以做自加或自减运算; 结果是将这个指针变量指向下一个(++)或 上一个(--)存贮区域首地址。 7.3 指针运算符及与之有关的运算 main() { float a[10]={0,2,4,6,8,10,12,14,16,18},*p=a; printf("%g\n",*p); printf("%g\n",*(++p)); printf("%g\n",*p--); printf("%g\n",++(*p)); getch(); }

7,3指针运算符及与之有关的运算 2.与指针有关的运算 第 (4)两个相同类型的地址相减(相加没有 章 意义),得到这两个地址之间相隔的存贮区 域个数; 针 main() {float a[10]={0,1,2,3,4,5,6,7,8,9},*p=&a[9]i printf("%u,%u n",a,p); printf("o%d小n",p-a)i getch();
第 7 章 指 针 2.与指针有关的运算 (4)两个相同类型的地址相减(相加没有 意义),得到这两个地址之间相隔的存贮区 域个数; 7.3 指针运算符及与之有关的运算 main() { float a[10]={0,1,2,3,4,5,6,7,8,9},*p=&a[9]; printf("%u,%u\n",a,p); printf("%d\n",p-a); getch(); }

7.3指针运算符及与之有关的运算 2.与指针有关的运算 第 (5)两个相同类型地址作关系运算(比较大 章 小),用于比较两个地址之间的距离。 针 main( {inta[10]={0,2,4,6,8,10,12,14,16,18,*p; for(p=&a[9];p>=a;p--) printf("%3d",*p); getch();
第 7 章 指 针 2.与指针有关的运算 (5)两个相同类型地址作关系运算(比较大 小),用于比较两个地址之间的距离。 7.3 指针运算符及与之有关的运算 main() { int a[10]={0,2,4,6,8,10,12,14,16,18},*p; for(p=&a[9];p>=a;p--) printf("%3d",*p); getch(); }

7.4指针与一维数组的关系 1.一维数组名和指向它的指针变量名二者几乎可以互换; 第 mainO 章 inta[10]={0,2,4,6,8,10,12,14,16,18},*p=a; int i; /*用数组名*/ 指 for(i=0;i<10;i+) printf("%3d”,a[i]); printf("\n"); for(i=0;i10;i+) /*用指针变量名当数组名*/ printf("%3d",p[i]); printf("\n"); for(i=0;i<10;i+)/*用指针变量名*/ printf("%3d",*(p+i)); printf("In"); for(i=0;i<10;i+)/*用数组名*/ printf("%3d",*(a+i)); 喜 getch();
第 7 章 指 针 7.4 指针与一维数组的关系 1.一维数组名和指向它的指针变量名二者几乎可以互换; main() { int a[10]={0,2,4,6,8,10,12,14,16,18},*p=a; int i; for(i=0;i<10;i++) /*用数组名*/ printf("%3d",a[i]); printf("\n"); for(i=0;i<10;i++) /*用指针变量名当数组名*/ printf("%3d",p[i]); printf("\n"); for(i=0;i<10;i++) /*用指针变量名*/ printf("%3d",*(p+i)); printf("\n"); for(i=0;i<10;i++) /*用数组名*/ printf("%3d",*(a+i)); getch(); }