第8章善于利用指针
《C语言》章节列表

第1章程序设计和C语言1第2章算法——程序的灵魂16第3章最简单的C程序设计——顺序程序设计第4章选择结构程序设计85第5章循环结构程序设计114第6章利用数组处理批量数据1426.1怎样定义和引用一维数组1426.1.1怎样定义一维数组1436.1.2怎样引用一维数组元素1446.1.3一维数组的初始化1456.1.4一维数组程序举例1466.2怎样定义和引用二维数组1486.2.1怎样定义二维数组1496.2.2怎样引用二维数组的元素1506.2.3二维数组的初始化1516.2.4二维数组程序举例1526.3字符数组1546.3.1怎样定义字符数组1546.3.2字符数组的初始化1556.3.3怎样引用字符数组中的元素1556.3.4字符串和字符串结束标志1566.3.5字符数组的输入输出1596.3.6使用字符串处理函数1616.3.7字符数组应用举例165习题168第7章用函数实现模块化程序设计1707.1为什么要用函数1707.2怎样定义函数1727.2.1为什么要定义函数1727.2.2定义函数的方法1737.3调用函数1747.3.1函数调用的形式1747.3.2函数调用时的数据传递1757.3.3函数调用的过程1777.3.4函数的返回值1787.4对被调用函数的声明和函数原型1797.5函数的嵌套调用1827.6函数的递归调用1847.7数组作为函数参数1927.7.1数组元素作函数实参1937.7.2数组名作函数参数1947.7.3多维数组名作函数参数1977.8局部变量和全局变量1997.8.1局部变量1997.8.2全局变量2007.9变量的存储方式和生存期2047.9.1动态存储方式与静态存储方式2047.9.2局部变量的存储类别2057.9.3全局变量的存储类别2087.9.4存储类别小结2127.10关于变量的声明和定义2147.11内部函数和外部函数2157.11.1内部函数2157.11.2外部函数215习题218第8章善于利用指针2208.1指针是什么2208.2指针变量2228.2.1使用指针变量的例子2228.2.2怎样定义指针变量2238.2.3怎样引用指针变量2248.2.4指针变量作为函数参数2268.3通过指针引用数组2308.3.1数组元素的指针2308.3.2在引用数组元素时指针的运算2318.3.3通过指针引用数组元素2338.3.4用数组名作函数参数2378.3.5通过指针引用多维数组2458.4通过指针引用字符串2558.4.1字符串的引用方式 2558.4.2字符指针作函数参数2598.4.3使用字符指针变量和字符数组的比较263 8.5指向函数的指针2668.5.1什么是函数指针2668.5.2用函数指针变量调用函数2668.5.3怎样定义和使用指向函数的指针变量268 8.5.4用指向函数的指针作函数参数2708.6返回指针值的函数2748.7指针数组和多重指针2778.7.1什么是指针数组 2778.7.2指向指针数据的指针2808.7.3指针数组作main函数的形参2828.8动态内存分配与指向它的指针变量2858.8.1什么是内存的动态分配2858.8.2怎样建立内存的动态分配2858.8.3void指针类型 2878.9有关指针的小结288习题291第9章用户自己建立数据类型2939.1定义和使用结构体变量2939.1.1自己建立结构体类型2939.1.2定义结构体类型变量 2959.1.3结构体变量的初始化和引用2979.2使用结构体数组3009.2.1定义结构体数组3009.2.2结构体数组的应用举例3019.3结构体指针3039.3.1指向结构体变量的指针3039.3.2指向结构体数组的指针3049.3.3用结构体变量和结构体变量的指针作函数参数306 9.4用指针处理链表3099.4.1什么是链表 3099.4.2建立简单的静态链表3109.4.3建立动态链表3119.4.4输出链表3159.5共用体类型3179.5.1什么是共用体类型3179.5.2引用共用体变量的方式3189.5.3共用体类型数据的特点3199.6使用枚举类型3239.7用typedef声明新类型名326习题330第10章对文件的输入输出33110.1C文件的有关基本知识33110.1.1什么是文件33110.1.2文件名33210.1.3文件的分类33210.1.4文件缓冲区33310.1.5文件类型指针33310.2打开与关闭文件33510.2.1用fopen函数打开数据文件33510.2.2用fclose函数关闭数据文件33710.3顺序读写数据文件33810.3.1怎样向文件读写字符33810.3.2怎样向文件读写一个字符串34110.3.3用格式化的方式读写文件34410.3.4用二进制方式向文件读写一组数据34510.4随机读写数据文件34910.4.1文件位置标记及其定位34910.4.2随机读写 35210.5文件读写的出错检测353习题354第11章常见错误分析355附录370附录A在Visual C++ 6.0环境下运行C程序的方法370附录B常用字符与ASCII代码对照表377附录CC语言中的关键字378附录D运算符和结合性378附录EC语言常用语法提要380附录FC库函数384参考文献390第4章选择结构程序设计854.1选择结构和条件判断854.2用if语句实现选择结构874.2.1用if语句处理选择结构举例874.2.2if语句的一般形式 894.3关系运算符和关系表达式914.3.1关系运算符及其优先次序914.3.2关系表达式924.4逻辑运算符和逻辑表达式924.4.1逻辑运算符及其优先次序934.4.2逻辑表达式944.4.3逻辑型变量964.5条件运算符和条件表达式974.6选择结构的嵌套1004.7用switch语句实现多分支选择结构1024.8选择结构程序综合举例106习题112第5章循环结构程序设计1155.1为什么需要循环控制1155.2用while语句实现循环1165.3用do…while语句实现循环1185.4用for 语句实现循环1215.5循环的嵌套1255.6几种循环的比较1265.7改变循环执行的状态1265.7.1用break语句提前终止循环1275.7.2用continue语句提前结束本次循环1285.7.3break语句和continue语句的区别1295.8循环程序举例132习题141第6章利用数组处理批量数据1436.1怎样定义和引用一维数组1436.1.1怎样定义一维数组1446.1.2怎样引用一维数组元素1456.1.3一维数组的初始化1466.1.4一维数组程序举例1476.2怎样定义和引用二维数组1496.2.1怎样定义二维数组1506.2.2怎样引用二维数组的元素1516.2.3二维数组的初始化1526.2.4二维数组程序举例1536.3字符数组1556.3.1怎样定义字符数组1556.3.2字符数组的初始化1566.3.3怎样引用字符数组中的元素156 6.3.4字符串和字符串结束标志1576.3.5字符数组的输入输出1606.3.6使用字符串处理函数1626.3.7字符数组应用举例166习题169第7章用函数实现模块化程序设计171 7.1为什么要用函数1717.2怎样定义函数1737.2.1为什么要定义函数1737.2.2定义函数的方法1747.3调用函数1757.3.1函数调用的形式1757.3.2函数调用时的数据传递1767.3.3函数调用的过程1787.3.4函数的返回值1797.4对被调用函数的声明和函数原型181 7.5函数的嵌套调用1837.6函数的递归调用1857.7数组作为函数参数1937.7.1数组元素作函数实参1937.7.2数组名作函数参数1957.7.3多维数组名作函数参数1987.8局部变量和全局变量2007.8.1局部变量2007.8.2全局变量2017.9变量的存储方式和生存期2057.9.1动态存储方式与静态存储方式205 7.9.2局部变量的存储类别2067.9.3全局变量的存储类别2097.9.4存储类别小结2137.10关于变量的声明和定义2157.11内部函数和外部函数2167.11.1内部函数2167.11.2外部函数216习题219第8章善于利用指针2218.1指针是什么2218.2指针变量2238.2.1使用指针变量的例子2238.2.2怎样定义指针变量2248.2.3怎样引用指针变量2258.2.4指针变量作为函数参数2278.3通过指针引用数组2328.3.1数组元素的指针2328.3.2在引用数组元素时指针的运算2338.3.3通过指针引用数组元素2348.3.4用数组名作函数参数2398.3.5通过指针引用多维数组2478.4通过指针引用字符串2578.4.1字符串的引用方式 2578.4.2字符指针作函数参数2618.4.3使用字符指针变量和字符数组的比较265 8.5指向函数的指针2688.5.1什么是函数指针2688.5.2用函数指针变量调用函数2688.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数2728.6返回指针值的函数2768.7指针数组和多重指针2798.7.1什么是指针数组 2798.7.2指向指针数据的指针2828.7.3指针数组作main函数的形参2848.8动态内存分配与指向它的指针变量2878.8.1什么是内存的动态分配2878.8.2怎样建立内存的动态分配2878.8.3void指针类型 2898.9有关指针的小结290习题293第9章用户自己建立数据类型2959.1定义和使用结构体变量2959.1.1自己建立结构体类型2959.1.2定义结构体类型变量 2979.1.3结构体变量的初始化和引用2999.2使用结构体数组3029.2.1定义结构体数组3029.2.2结构体数组的应用举例3049.3结构体指针3059.3.1指向结构体变量的指针3059.3.2指向结构体数组的指针3069.3.3用结构体变量和结构体变量的指针作函数参数3089.4用指针处理链表3119.4.1什么是链表 3119.4.2建立简单的静态链表3129.4.3建立动态链表3139.4.4输出链表3179.5共用体类型3199.5.1什么是共用体类型3199.5.2引用共用体变量的方式3209.5.3共用体类型数据的特点3219.6使用枚举类型3259.7用typedef声明新类型名328习题332第10章对文件的输入输出33310.1C文件的有关基本知识33310.1.1什么是文件33310.1.2文件名33410.1.3文件的分类33410.1.4文件缓冲区33510.1.5文件类型指针33510.2打开与关闭文件33710.2.1用fopen函数打开数据文件33710.2.2用fclose函数关闭数据文件33910.3顺序读写数据文件34010.3.1怎样向文件读写字符34010.3.2怎样向文件读写一个字符串34310.3.3用格式化的方式读写文件34610.3.4用二进制方式向文件读写一组数据34710.4随机读写数据文件35110.4.1文件位置标记及其定位35110.4.2随机读写 35410.5文件读写的出错检测355习题356第11章常见错误分析374附录390附录A在Visual C++ 6.0环境下运行C程序的方法390 附录CC语言中的关键字398附录D运算符和结合性398附录EC语言常用语法提要400附录FC库函数404参考文献410。
职业技术学院教师职位试讲题目

第十八课 二、生词
初级汉语教材
杨寄洲
北京汉语大学出版社
17381职业技术学院教师职位试讲题目 Nhomakorabea序号
专业名称
课程名称
章节
教材名称
作者
出版社
书号
1
计算机科学与技术
C程序设计
第8章善于利用指针
第一节和第二节
C程序设计(第四版)
谭浩强
清华大学出版社
24464
2
旅游管理
导游业务知识
第三章第二节全陪导游服务程序
导游业务知识
新疆维吾尔自治区旅游局编
旅游教育出版社
21948
3
财务管理
基础会计
第二章会计6要素
基础会计
赵丽生
东北财经大学出版社
10246
4
审计
审计学原理
第四章审计风险
审计(第三版)
胡中艾
东北财经大学出版社
04757
5
物流管理
配送管理
第五章第三节商品拣选
配送中心管理与运作
朱华
高等教育出版社
36880
6
电子商务
电子商务概论
第二章第二节B2C电子商务模式
电子商务概论
宋文官
清华大学出版社
90964
7
土木工程
建筑工程测量
第2章第四节
水准测量的方法
建筑工程测量
周建郑
中国建筑工业出版社
96879
8
机械电子工程
电子技术基础
第五章集成运放基本单元电路
电子技术基础
庞程山
北京高等教育出版社
6578
9
体育
第8章 善于利用指针zsq

*(*(a+i)+j)代表什么?
a a+1 a+2
行指针
a[0] a[0]+1 a[0]+2 a[0]+3 列指针 a[0] a[1] a[2] 1 9 17 3 11 19 5 13 21 7 15 23
2. 指向多维数组元素的指针变量
(1) 指向数组元素的指针变量
例7.3 有一个3×4的二维数组,要求用 指向元素的指针变量输出二维数组各元 素的值。
a[0]+2代表a[0][2]的地址
a[0]+3代表a[0][3]的地址 a[0] a[0]+1 a[0]+2 a[0]+3 列指针 a[0] a[1] a[2] 1 9 17 3 11 19 5 13 21 7 15 23
a a+1 a+2
行指针
a[1]代表谁的地址? a[1]+1代表谁的地址?
(2) 指针法,如*(a+i)或*(p+i) 其中a是数组名,p是指向数组元素的指针 变量,其初值p=a或p=&a[0]
7.2.1 指针与一维数组
例7.2 输出整型数组a[10]的全部元素。
解题思路:引用数组中各元素的值有3种 方法:(1)下标法;(2)通过数组名计算 数组元素地址,找出元素的值;(3) 用指 针变量指向数组元素 分别写出程序,以资比较分析。
(1) 下标法。 #include <stdio.h> int main() { int a[10]; int i; printf(“enter 10 integer numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf(“%d ”,a[i]); printf("%\n"); return 0; }
第8章-善于利用指针 谭浩强第五版

8.2.3 怎样引用指针变量 • 在引用指针变量时,可能有使三p种指情向况a:
–给指针变量赋值。如:p=&a; *p相当于a
–引用指针变量指向的变量。如有
p=&a; *p=1;
则执行printf(“%d”,*p); 将输出1
–引用指针变量的值。
–如:printf(“%o”,p); 以八进制输出a的地址 10
23
例8.5 输入3个整数a,b,c,要求按由大到小 的顺序将它们输出。用函数实现。 • 解题思路:采用例8.3的方法在函数中改变这3个 变量的值。用swap函数交换两个变量的值,用 exchange函数改变这3个变量的值。
24
#include <stdio.h>
int main()
{ void exchange(int *q1, int *q2, int *q3);
}
交换指针指
向的变量值
26
8.3 数组的指针 8.3.1 数组元素的指针 • 一个变量有地址,一个数组包含若干元素,每个
数组元素都有相应的地址 • 指针变量可以指向数组元素(把某一元素的地址
放到一个指针变量中) • 所谓数组元素的指针就是数组元素的地址
27
• 可以用一个指针变量指向一个数组元素 int a[10]={1,3,5,7,9,11,13,15,17,19}; int *p; p=&a[0];
pointer_1 a
&a 95
pointer_2 b
&b 59
p1 &a
p2 &1,int *p2)
{ int temp;
temp=*p1;
*p1=*p2;
*p2=temp; }
精品课件-C程序设计(第三版)(荣政)-第8章

第八章 指针
指针类型是对所有类型的指针的总称,指针的类型是指 针所指对象的数据类型。例如,pc是指向字符变量的指针, 简称字符指针。字符指针是基本类型的指针之一,除各种基 本类型之外,允许说明指向数组的指针、指向函数的指针、 指向结构体和共用体的指针以及指向各类指针的指针。在C 语言中只有指针被允许用来存放地址的值,其它类型的变量 只能存放该类型的数据。(很多书中用指针一词来指地址值, 或用指针变量来代表指针,阅读中应注意其具体含义。)
例8.2中指向整型的指针point在定义之后直接使用了,这 两条语句在编译时不会出现语法错误,但在使用时却几乎肯定 会出问题。表面上看,scanf()函数的参数要求给出的是地址, 而point的值就代表的是地址,但是point的值究竟是多少,也 就是说point究竟指向哪里,我们无法得知,在这种情况下就 对point指向的单元进行输入操作,将冲掉point指向的单元的 原有内容,假如这个单元是操作系统的所在处,就破坏了操作 系统,显然是一件危险的事。
为了理解指针的概念,程序员要有关于计算机如何在存储 器中存储信息的基本知识。以下简单地介绍个人计算机中存储 器存储的情况。
第八章 指针
个人计算机中CPU可以直接访问的,用来存储程序和数据 的记忆部件称为内存储器,内存储器由成千上万个顺序存储单 元组成,每个单元由一个惟一的地址标识。给定计算机的存储 器地址范围为从0到所安装的存储器数量的最大值。在计算机 上运行的每一个程序都要使用存储器。例如,操作系统要占用 一些计算机存储空间,每个应用程序也要占用计算机存储空间。 按照面向过程的结构化程序设计方法,程序代码和程序要处理 的数据是分开存储的,所以,一个程序在内存中要占两部分空 间:数据部分和指令代码部分。
第八章 指针
善于利用指针 PPT课件

50
*i_pointer=50;
将i的地址 存到这里
间接存取
i
直接存取
2000
3
间接存取
i_pointer
2000
*i_pointer
3 2000
为了表示将数值3送到变量中,可以有两 种表达方法: (1) 将3直接送到变量i所标识的单元中,例 如:i=3; (2) 将3送到变量i_pointer所指向的单元 (即变量i的存储单元),例如: *i_pointer=3; 其中*i_pointer表示 i_pointer指向的对象
8.1 指针是什么
内存区的每一个字节有一个编号,这就是 “地址”,它相当于旅馆中的房间号。 在地址所标识的内存单元中存放数据,这相 当于旅馆房间中居住的旅客一样。 由于通过地址能找到所需的变量单元,我们 可以说,地址指向该变量单元。 将地址形象化地称为“指针”
务必弄清楚存储单元的地址和存储 单元的内容这两个概念的区别 例如:
指向就是通过地址来体现的
假设i_pointer中的值是变量i的地址 (2000),这样就在i_pointer和变量i之间 建立起一种联系,即通过i_pointer能知道i 的地址,从而找到变量i的内存单元
由于通过地址能找到所需的变量单元,因 此说,地址指向该变量单元
将地址形象化地称为“指针”。意思是通 过它能找到以它为地址的内存单元
#include <stdio.h> 此处*与类型名在一起。 此时共同定义指针变量 int main() { int a=100,b=10; int *pointer_1, *pointer_2; pointer_1=&a; pointer_2=&b; printf(“a=%d,b=%d\n”,a,b); printf(“*pointer_1=%d,*pointer_2= %d\n”,*pointer_1,*pointer_2); return 0; 此处*与指针变量一起使用。此 } 时代表指针变量所指向的变量
C语言 第8章 善于利用指针

第8章善于利用指针指針是什么⏹如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元⏹内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。
⏹在地址所标识的内存单元中存放数据,这相当于旅馆房间中居住的旅客一样。
⏹由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。
⏹将地址形象化地称为“指针”⏹务必弄清楚存储单元的地址和存储单元的内容这两个概念的区别指针变量2怎样定义指针变量⏹定义指针变量的一般形式为:类型*指针变量名;如:i n t*p o i n t e r_1,*p o i n t e r_2;•i n t是为指针变量指定的“基类型”•基类型指定指针变量可指向的变量类型•如p o i n t e r_1可以指向整型变量,但不能指向浮点型变量2怎样定义指针变量⏹下面都是合法的定义和初始化:f l o a t*p o i n t e r_3;c h a r*p o i n t e r_4;i n t a,b;i n t*p o i n t e r_1=&a,*p o i n t e r_2=&b;3怎样引用指针变量⏹在引用指针变量时,可能有三种情况:•给指针变量赋值。
如:p=&a;•引用指针变量指向的变量。
如有p=&a;*p=1;则执行p r i n t f(“%d”,*p);将输出1•引用指针变量的值。
如:p r i n t f(“%o”,p);3怎样引用指针变量⏹要熟练掌握两个有关的运算符:(1)&取地址运算符。
&a是变量a的地址(2)*指针运算符(“间接访问”运算符)如果:p指向变量a,则*p就代表a。
k=*p;(把a的值赋给k)*p=1;(把1赋给a)4指针变量作为函数参数通过指针引用数组1数组元素的指针⏹所谓数组元素的指针就是数组元素的地址⏹可以用一个指针变量指向一个数组元素i n t a[10]={1,3,5,7,9,11,13,15,17,19};i n t*p;p=&a[0];⏹在指针指向数组元素时,允许以下运算:•加一个整数(用+或+=),如p+1•减一个整数(用-或-=),如p-1•自加运算,如p++,++p•自减运算,如p--,--p•两个指针相减,如p1-p2(只有p1和p2都指向同一数组中的元素时才有意义)3通过指针引用数组元素⏹引用一个数组元素,可用下面两种方法:(1)下标法,如a[i]形式(2)指针法,如*(a+i)或*(p+i)其中a是数组名,p是指向数组元素的指针变量,其初值p=a 4用数组名作函数参数⏹用数组名作函数参数时,因为实参数组名代表该数组首元素的地址,形参应该是一个指针变量⏹C编译都是将形参数组名作为指针变量来处理的通过指针引用字符串1字符串的引用方式⏹字符串是存放在字符数组中的。
浙江师范大学886软件工程综合基础2020年考研专业课初试大纲

浙江师范大学硕士研究生入学考试初试科目考 试 大 纲科目代码、名称:886软件工程综合基础适用专业:083500软件工程(一级学科)、085400电子信息(软件工程领域)一、考试形式与试卷结构(一)试卷满分及考试时间本试卷满分为150分,考试时间为180分钟。
(二)答题方式答题方式为闭卷、笔试。
试卷由试题和答题纸组成;答案必须写在答题纸(由考点提供)相应的位置上。
(三)试卷题型结构(一)C程序设计部分,满分60分,其中:1、单项选择题:10小题,每小题3分,共30分2、程序设计题:3小题,每小题10分,共30分(二)软件工程基础部分,满分90分,其中:1、分析设计题:3小题,每小题15分,共45分2、综合论述题:3小题,每小题15分,共45分二、考查目标(复习要求)软件工程专业全日制学术型研究生入学考试科目《软件工程综合基础》的考试内容包括C程序设计和软件工程基础两部分。
其中:C程序设计部分要求考生掌握C语言的基本内容及程序设计的基本方法、常用算法与编程技巧,掌握结构化程序设计思想,选择适当的数据类型表示实际问题,能使用函数进行模块化程序设计,掌握应用计算机解决和处理实际问题的思维方法与基本能力。
软件工程基础部分要求考生掌握软件工程的基本概念、基本原理、基本方法和技术,理解规范化、文档化在软件生命周期过程中的重要性,并能运用相关理论和方法解决软件工程中的实际问题。
三、考查范围或考试内容概要C程序设计部分第一章程序设计与C语言1.了解计算机语言的基本概念。
2.了解C语言的背景、特点。
3.掌握C语言程序的结构。
第二章算法——程序的灵魂1.了解算法的概念、特性。
2.了解结构化程序设计方法。
3.掌握算法的描述方法。
第三章最简单的C程序设计——顺序程序设计1.掌握C语言的常量与变量;整型、浮点型、字符型数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重点难点
指针和地址的概念
指向数组/字符串的指针
指针变量/数组名做函数参数
2014-6-22
第8章 善于利用指针
3
8.1 指针是什么
在程序中定义了一个变量,在对程序进行编译时,
系统就会给这个变量分配内存单元 内存区的每一个字节有一个编号,这就是“地址”, 它类似旅馆中的房间号 通过地址能找到所需的变量内存单元,我们说,地 址指向该变量内存单元 将地址形象化地称为“指针”
14
8.2 指针变量
在定义指针变量时要注意两点: (1)指针变量前面的“*”,表示该变量的类型为指针 型变量。 例: float *pointer_1; 指针变量名是pointer_1 ,而不是*pointer_1 。 (2) 在定义指针变量时必须指定基类型。
2014-6-22
第8章 善于利用指针
2014-6-22 第8章 善于利用指针 28
a 4 b 8
p1
举例
例8.5 :输入a、b、c共3个整数,按大小顺序输出。 解题思路:采用例8.3的方法在函数中改变这3个变
量的值。用swap函数交换两个变量的值,用 exchange函数改变这3个变量的值。
2014-6-22
第8章 善于利用指针
2014-6-22
第8章 善于利用指针
4
8.1 指针是什么
1.按变量地址存取变量值的方式称为“直接访问”方 式 printf("%d",i); scanf ("%d",&i) k=i+j; 2. 另一种存取变量值的方式称为“间接访问”的方 式即,将变量 i 的地址存放在另一个变量中。
2014-6-22
15
8.2 指针变量
int a=8,*p; p= &a ; 变量的地址:&a、p
8
&a意变量的类型必须与指针变量的类型相同! int *p=11;printf("%d",a);
2014-6-22
第8章 善于利用指针
16
举例
void main( ) { int a,b,*p1,*p2; a=100; b=10; p1=&a; p2=&b; printf("%d,%d\n",a,b); printf("%d,%d\n",*p1,*p2); }
2014-6-22 第8章 善于利用指针 27
void swap(int *p1,int *p2) { int *p; p=p1;p1=p2; p2=p; }
输入数据: 4 8
point_1 point_1
p2 point_2 point_2 void main ( ) { int a,b; int *point_1,*point_2; scanf("%d%d",&a,&b); point_1=&a;point_2=&b; 输出结果: if(a<b) swap(point_1,point_2); 4, 8 printf("\n%d,%d\n",a,b); 4, 8 printf("\n%d,%d\n",*point_1,*point_2); } 注:1.不能企图通过改变形参地址而使实参地址也改变, 也就是说调用函数不能改变实参指针变量的值。 2.调用函数可以改变实参指针变量所指变量的值。
以八进制输出a的地址
2014-6-22 第8章 善于利用指针 12
8.2 指针变量
(1) & 取地址运算符 &a是变量a的地址 (2) * 指针运算符(“间接访问”运算符) 如果: p指向变量a,则*p就代表a。 k=*p; (把a的值赋给k ) *p=1; (把1赋给a )
2014-6-22
例8.3:对输入的两个整数按大小顺序输出,用函数处 理,而且用指针类型的数据作函数参数。
2014-6-22
第8章 善于利用指针
25
void swap(int *p1,int *p2) { int p; p=*p1;*p1=*p2; *p2=p;}
输入数据: 4 8
p1
4 8 void main ( ) { int a,b; int *point_1,*point_2; point_2 b point_2 scanf("%d%d",&a,&b); 4 &b 8 point_1=&a;point_2=&b; &b if(a<b) swap(point_1,point_2); printf("\n%d,%d\n",a,b); 输出结果: printf("\n%d,%d\n",*point_1,*point_2); 8 , 4 } 8,4
2014-6-22 第8章 善于利用指针
ptr1 12ff7c
ptr2 12ff78
19
举例
读程序
#include <stdio.h> void main() { int a=2,b=3; int *p=&a; printf("%d \n",*p); *p=4; p=&b; printf("%d \n",*p); *p=6; printf("%d %d\n",a,b); }
下面都是合法的定义: float *pointer_3; char *pointer_4;
2014-6-22 第8章 善于利用指针 10
8.2 指针变量
如:int *pointer_1, *pointer_2; int是为指针变量指定的“基类型” 基类型指定指针变量可指向的变量类型 如pointer_1可以指向整型变量,但不能指向浮点型 变量
23
说明
a和b的值并未交换,它们仍保持原值 但p1和p2的值改变了。p1的值原为&a,后来变成
&b,p2原值为&b,后来变成&a 这样在输出*p1和*p2时,实际上是输出变量b和a的 值,所以先输出9,然后输出5
2014-6-22
第8章 善于利用指针
24
8.2 指针变量
指针变量作为函数参数
2014-6-22 第8章 善于利用指针 22
8.2 指针变量
p1=&a;p2=&b; if(a<b) {p=p1;p1=p2;p2=p;} 输入: 5,9
p1 a 5 *p1 *p2 b 9 *p2 *p1
p &a
&a &b p2 &a &b
输出: 5,9 9,5
2014-6-22 第8章 善于利用指针
2014-6-22 第8章 善于利用指针
point_1 point_1 &a &a
a
p2
26
举例
void swap(int *p1,int *p2) { int p; p=*p1;*p1=*p2; void swap(int *p1,int *p2) *p2=p;} { int *temp; *temp=*p1; *p1=*p2; 错!!! *p2=*temp; 无确定的指向 }
2014-6-22 第8章 善于利用指针 21
举例
例8.2 :比较两个整数按先大后小的顺序输出
#include <stdio.h> void main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a;p2=&b; if(a<b) { p=p1;p1=p2;p2=p; } printf("a=%d,b=%d\n\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); }
第8章 善于利用指针
13
8.2 指针变量
可以用赋值语句使一个指针变量得到另一个变量的
地址,从而使它指向该变量。 例如:pointer_1=&i ;pointer_2= &j ; 用相同类型的指针变量赋值 例如:int a=3,*p1,*p2; p1=&a;p2=p1;
2014-6-22
第8章 善于利用指针
2014-6-22 第8章 善于利用指针 18
举例
内存 void main() num1 { 50 int num1 = 50, num2 = 100; int *ptr1, *ptr2; 12ff7c ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); num2 printf("\n num1 的地址是: %x", ptr1); ptr2 = &num2; 50 100 printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x", ptr2); 12ff78 *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); }
i
3 2000
2014-6-22
i_pt
i
3
2000
第8章 善于利用指针
7
8.1 指针是什么
变量
int x 10 int *ptr_x ED53
指 针
地址