使用指针C语言程序设计,C语言程序设计课件第8章善于使用指针

《C语言程序设计课件第8章善于使用指针》由会员分享,可在线阅读,更多相关《C语言程序设计课件第8章善于使用指针(54页珍藏版)》请在人人文库网上搜索。

1、8.1 什么是指针 8.2 指针变量 8.3 通过指针引用数组 8.4 通过指针引用字符串 8.5 提高部分,第8章 善于使用指针,P210,8.1 什么是指针,在定义变量时,系统就给这个变量分配内存单元。 编译系统根据程序中定义的变量类型,分配一定长度的空间。,P210,8.1 什么是指针,内存区的每一个字节有一个编号,这就是内存单元的“地址” 在地址所标志的内存单元中存放数据。,P210,由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。 在C语言中,将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元。,8.1 什么是指针,P210,int a,b;,a,b。

2、,2000,2004,a=3;,3,直接访问,8.1 什么是指针,P210,int a;,3,a,a_pointer,2000,a_pointer=,间接访问,定义特殊变量a_pointer,2000,通过a_pointer取值,8.1 什么是指针,P210,为了表示将数值送到变量中,可以有两种表达方法: (1) 将3直接送到变量a所代表的单元中 (2) 将3送到变量a_pointer所指向的单元(即a所代表的存储单元),指向就是通过地址来体现的 假设a_pointer中的值是变量a的地址(2000),这样就在a_pointer和变量a之间建立起一种联系,即通过a_pointer能知道a的地址。

3、,从而找到变量a的内存单元,一个变量的地址称为该变量的“指针” 例如,地址2000是变量i的指针 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量” a_pointer就是一个指针变量。指针变量就是地址变量,用来存放地址的变量,指针变量的值是地址(即指针),“指针”和“指针变量”是不同的概念 可以说变量a的指针是2000,而不能说a的指针变量是2000 指针是一个地址,而指针变量是存放地址的变量 常常将指针变量简称为指针,8.2 指针变量,8.2.1 使用指针变量访问变量的例子 8.2.2 怎样定义指针变量 8.2.3 怎样引用指针变量 8.2.4 指针变量作为函数参数,。

4、P211,8.2.1 使用指针变量访问变量的例子,例8.1 通过指针变量访问整型变量。,P211,8.2.2 怎样定义指针变量,P212,定义指针变量的一般形式为: 类型 * 指针变量名; 如:int *p1, *p2; int是为指针变量指定的“基类型” 基类型指定指针变量可指向的变量类型 如pointer_1可以指向整型变量,但不能指向浮点型变量,8.2.2 怎样定义指针变量,P212,下面都是合法的定义和初始化: float *pointer_3; char *pointer_4; int a,b; int *pointer_1=,8.2.3 怎样引用指针变量,P214,在引用指针变量时。

5、,可能有三种情况: 给指针变量赋值。如:p=,使p指向a,*p相当于a,以十六进制输出a的地址,8.2.3 怎样引用指针变量,P214,要熟练掌握两个有关的运算符: (1) 取地址运算符。 (把1赋给a),8.2.4 指针变量作为函数参数,P215,例8.3 利用函数交换两个整数的值。,8.3 通过指针引用数组,P220,8.3.1 数组元素的指针 8.3.2 通过指针引用数组元素 8.3.3 用数组名作函数参数,8.3.1 数组元素的指针,P220,一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地址 指针变量可以指向数组元素(把某一元素的地址放到一个指针变量中) 所谓数组元素的。

6、指针就是数组元素的地址,可以用一个指针变量指向一个数组元素 int a10=1,3,5,7,9,11,13,15,17,19; int *p; p=,等价于p=a;,等价于int *p=a; 或int *p=,注意:数组名a不代表整个数组,只代表数组首元素的地址。“p=a;”的作用是“把a数组的首元素的地址赋给指针变量p”,而不是“把数组a各元素的值赋给p”。,8.3.2 通过指针引用数组元素,引用数组元素,可用下面两种方法: (1)下标法,用数组名加下标 如ai (2)指针法,即地址法。 *(a+i) 或*(p+i) (其中初值p=a),P221,指针运算:通过指针的运算,可以方便地引用数组。

7、中的元素。,(1) 如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。 float a10,*p=a; 假设a0的地址为2000,则 p的值为2000 p+1的值为2004,(2) 如果p的初值为 int array10; fun (array,10); ,fun(int *arr,int n),void fun(int arr ,int n) void main() void fun(int arr,int n; int array10; fun (array,10); ,array0,arr0,array数组,arr,array3,。

8、arr3,arr+3,实参数组名是指针常量,但形参数组名是按指针变量处理 在函数调用进行虚实结合后,它的值就是实参数组首元素的地址 在函数执行期间,形参数组可以再被赋值 void fun (arr ,int n) printf(%dn, *arr); arr=arr+3; printf(%dn, *arr); ,8.4 通过指针引用字符串,8.4.1 字符串的表示形式 8.4.2 字符指针作函数参数 8.4.3 对使用字符指针变量和字符数组的讨论,P229,8.4.1 字符串的表示形式,可以用两种方法访问一个字符串: (1) 用字符数组存放一个字符串,然后用字符数组名和下标可以访问字符数组中的。

9、元素,也可以通过字符数组名用%s格式符输出一个字符串。 (2) 用字符指针指向一个字符串。可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。,P229,例8.10 定义字符指针,使它指向一个字符串。 #include void main() char *string=I love China!; printf(%sn,string); ,string,8.4.2 字符指针作函数参数,如果想把一个字符串从一个函数“传递”到另一个函数,可以用地址传递的办法,即用字符数组名作参数,也可以用字符指针变量作参数。 在被调用的函数中可以改变字符串的内容 在主调函数中可以引用改变后的字符。

10、串,P233,8.5 提高部分,8.5.1 指针使用的技巧 8.5.2 多维数组的指针 8.5.3 指向函数的指针 8.5.4 返回指针值的函数 8.5.5 指针数组 8.5.6 多重指针指向指针的指针,P239,8.5.1 指针使用的技巧,P239,void copy_string(char *from, char *to) for( ;*from!=0;from+,to+) *to=*from; *to=0; ,while(*to=*from)!=0) to+; from+; ,8.5.1 指针使用的技巧,P239,void copy_string(char *from, char *to。

11、) while(*to=*from)!=0) to+; from+; ,while(*to+=*from+)!=0) ;,8.5.1 指针使用的技巧,P239,void copy_string(char *from, char *to) while(*to=*from)!=0) to+; from+; ,while(*from!=0) *to+; *from+; ,8.5.1 指针使用的技巧,P239,void copy_string(char *from, char *to) while(*from!=0) *to+; *from+; ,while(*from),8.5.1 指针使用的技巧,。

12、P239,void copy_string(char *from, char *to) while(*to+=*from+) ; ,for( ; (*to+=*from+); ) ;,8.5.2 多维数组的指针,指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。,P240,int a34=1,3,5,7, 9,11,13,15,17,19,21,23;,a,a+1,a+2,int (*p)4;,指向一维数组的指针变量,p=a+1;,p指向a1行的开头,8.5.3 指向函数的指针,如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址,称为这。

13、个函数的指针。,P241,8.5.3 指向函数的指针,可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如: int (*p)(int,int); 定义p是指向函数的指针变量,它可以指向的函数类型为整型且有两个整型形参,P241,8.5.3 指向函数的指针,定义的一般形式为: 数据类型 (*指针变量名)(函数参数表列); 如果要用指针调用函数,必须先使指针变量指向该函数。如: p=max; 把max函数的入口地址赋给指针变量p,P241,8.5.3 指向函数的指针,调用函数时,只需将(*p)代替函数名即可。例如:c=(*p)(a,b); 相当于:c=。

14、max(a,b); 指向函数的指针变量的一个重要用途是把函数的入口地址作为实参传递给形参,此时形参是指向函数的指针变量。这样就能够在被调用的函数中使用实参函数,P241,8.5.4 返回指针值的函数,一个函数也可以返回指针型的数据。 例如: int *a(int x,int y); a是函数名,*表示此函数值是指针。 最前面的int表示返回的指针是指向整型变量的。 调用它以后能得到一个指向整型数据的指针(地址)。,P242,8.5.4 返回指针值的函数,返回指针值的函数一般定义形式为 类型名 *函数名(参数表列); 这种形式与定义指向函数的指针变量很相似,但请注意:在*a两侧没有括号。有括号就。

15、成指向函数的指针变量了。,P242,8.5.5 指针数组,一个数组,若其元素均为指针类型数据,称为指针数组。 例如: int *p4; p是数组,有4个元素 *表示此数组是指针类型的,每个数组元素(相当于一个指针变量)都可指向一个整型变量。,P242,8.5.5 指针数组,一维指针数组的定义的一般形式为 类型名数组名数组长度;,P242,8.5.5 指针数组,指针数组比较适合用来指向若干个字符串,使字符串处理更加方便灵活 可以分别定义一些字符串,然后用指针数组中的元素分别指向各字符串 由于各字符串长度一般是不相等的,所以比用二维数组节省内存单元,P242,8.5.5 指针数组,图书馆有若干本书,想把书名放在一个数组中,然后要对这些书目进行排序和查询,P242,8.5.5 指针数组,图书馆有若干本书,想把书名放在一个数组中,然后要对这些书目进行排序和查询,P242,8.5.6 多重指针指向指针的指针,指向另一个指针数据的指针变量,称为指向指针的指针。,P243,name,8.5.6 多重指针指向指针的指针,char *p;,P243,name,p,p=name+2。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值