中国高校课件下载中心 》 教学资源 》 大学文库

内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(二)

文档信息
资源类别:文库
文档格式:DOC
文档页数:3
文件大小:69KB
团购合买:点击进入团购
内容简介
内蒙古科技大学:《C语言程序设计》课程授课教案(讲义)第七章 指针(二)
刷新页面文档预览

内蒙古科技大学 教 案 课程名称:C语言程序设计 编写时间:2014年2月16日 授课章节 第七章指针(二) 目的要求 掌握指针与一维数组关系 用指针访问一维数组 重点难点 教学内容 1、指针与 一维数组 指针可以指向变量,也可以指向数组元素。由于数组占据一块连续的存储单元,且数 组中的各元素的相对位置总是固定的,所以对数组元素的引用除了使用下标外,还可以通 过指针运算来实现。 由于数组元素也是一个变量,因此定义指向数组元素的指针与定义指向变量的指 相同。例如: int a[10],*p: 为指针变量p赋值及引用数组元素的方法如下: p=&a[0]: /*p指向a[0]*/ p=100: * 给p指向的数组元素a[0]赋值100*/ a[1]=和+10: 1* 由于2瑞中的维数组名代衣数的器指的的的素低所元的 引月 元素的值给a[1]赋值110* 地址,所以&a[0]与a是等价的,p=&a[O]也可写为p=a。 按照C语言的规定,当指针变量p指向数组中的某一元素时,p+1则指向下一个元素, 。+n指向后面楚n个元,同样 。一1指向前一个元素,而p n则指向前面第n个元素 指针移动1,系 内部移动的字节数 取决于指针变量p的基类型。若为字符型则指 移动1个字节,若为整型,则指针移动四个字节,依此类推。 综上所述,若指针变量p指向的是数组第一个元素,则p+1和p+i分别代表下标为1 和下标为i的元素的地址,相应下标元素的值分别为*(p+1)和*(p+i)。因此,完全可以使 用指针方式访问数组。由于一维数组名也是地址,而且是数组的首地址,所以a[i]也可 用*(a+i)来表示 ,而 则为 的地址 实际上系统在编译 对数 且元系 ali 1就是 理成*(a+),也就是说通过下标形式访问数组元素总可以通过指针形式来实现,即按数组 首地址加上相对位移量得到第讠个元素的地址,然后访问对应存储单元的内容。可以说下 标运算就是指针运算,它只不过是指针运算的另一种表示方法。因此当p指向数组ā的首 地址时,表示数组元素 a「i门有四种形式: [il n+t 需要说明的是:数组名一且定义所代表的地址是不能改变的。虽然*(a+1)也能访问数 组中每个元素,但它是通过1的变化来实现的,而指针不仅能以*(p+i)的形式,还可以通 过改变指向或指针运算来完成对数组元素的访问。 例用数组名法从键盘接收并输出数组元素

内 蒙 古 科 技 大 学 教 案 课程名称: C 语言程序设计 编写时间:2014 年 2 月 16 日 授课章节 第七章 指针(二) 目的要求 掌握指针与一维数组关系 重点难点 用指针访问一维数组 教学内容 1、指针与一维数组 指针可以指向变量,也可以指向数组元素。由于数组占据一块连续的存储单元,且数 组中的各元素的相对位置总是固定的,所以对数组元素的引用除了使用下标外,还可以通 过指针运算来实现。 由于数组元素也是一个变量,因此定义指向数组元素的指针与定义指向变量的指针 相同。例如: int a[10], *p; 为指针变量 p 赋值及引用数组元素的方法如下: p=&a[0]; /* p 指向 a[0] */ *p=100; /* 给 p 指向的数组元素 a[0]赋值 100 */ a[1]= *p +10; /* 引用 p 指向的数组元素的值给 a[1]赋值 110 * 由于 C 语言中的一维数组名代表数组的首地址,即数组的第一个元素所在存储单元的 地址,所以&a[0]与 a 是等价的,p=&a[0]也可写为 p=a。 按照 C 语言的规定,当指针变量 p 指向数组中的某一元素时,p+1 则指向下一个元素, p+n 指向后面第 n 个元素;同样,p-1 指向前一个元素,而 p-n 则指向前面第 n 个元素。 当指针移动 1,系统内部移动的字节数,取决于指针变量 p 的基类型。若为字符型则指针 移动 1 个字节,若为整型,则指针移动四个字节,依此类推。 综上所述,若指针变量 p 指向的是数组第一个元素,则 p+1 和 p+i 分别代表下标为 1 和下标为 i 的元素的地址,相应下标元素的值分别为*(p+1)和*(p+i)。因此,完全可以使 用指针方式访问数组。由于一维数组名也是地址,而且是数组的首地址,所以 a[i] 也可 用*(a+i)来表示,而 a+i 则为 a[i]的地址。实际上系统在编译时对数组元素 a[i]就是处 理成*(a+i),也就是说通过下标形式访问数组元素总可以通过指针形式来实现,即按数组 首地址加上相对位移量得到第 i 个元素的地址,然后访问对应存储单元的内容。可以说下 标运算就是指针运算,它只不过是指针运算的另一种表示方法。因此当 p 指向数组 a 的首 地址时,表示数组元素 a[i]有四种形式: a[i] * (a+i) *(p+i) p[i] p++ 需要说明的是:数组名一旦定义所代表的地址是不能改变的。虽然*(a+i)也能访问数 组中每个元素,但它是通过 i 的变化来实现的,而指针不仅能以*(p+i)的形式,还可以通 过改变指向或指针运算来完成对数组元素的访问。 例 用数组名法从键盘接收并输出数组元素

int a[10],i; for(i=0:i main() char a[]="I love my Motherland !"*p: p=a: while(*p)) putchar(*p++) 除此之外,字符指针变量还可以指向字符串常量,这是其它类型的指针所不具备的。 例如 char *string="I love my Motherland!"; 或 char *string: love my Motherland! 在这里没有定义字符数组,只定义了一个字符指针变量,并用字符串常量对字符指针 变量初始化或赋值。C语言对字符串常量是按字符数组处理的,在内存开辟了一个字符数 组用来存放字符串常量。由于指针变量只能保存地址,所以赋给字符指针变量的不是字符 串自身,而是字符串的首地址。 例 char a[]="I love my Motherland !"b[40]; int i=0: b[i]=a[i];

main() { int a[10],i; for(i=0;i main() { char a[]="I love my Motherland !", *p; p=a; while(*p)) putchar(*p++); } 除此之外,字符指针变量还可以指向字符串常量,这是其它类型的指针所不具备的。 例如: char *string="I love my Motherland!"; 或 char *string; string="I love my Motherland!" 在这里没有定义字符数组,只定义了一个字符指针变量,并用字符串常量对字符指针 变量初始化或赋值。C 语言对字符串常量是按字符数组处理的,在内存开辟了一个字符数 组用来存放字符串常量。由于指针变量只能保存地址,所以赋给字符指针变量的不是字符 串自身,而是字符串的首地址。 例 用字符数组实现字符串的复制。 main() { char a[]="I love my Motherland !",b[40]; int i=0; while(a[i]!= '\0')) { b[i]=a[i];

i+: b[i]=\0 printf(%s“,b) } 在上例中使用的是字符数组,由于复制的是字符串,所以在字符元素复制完成之后, 字符指 要置一个字符串结束标志'10。 针在没 例用字符指针实现字符串的复制。 main() 以间接 访问形 char *a="I love my Motherland !"b[40],*pl,*p2; 式赋值 或接收 printf("%s",pl): while(*pl) 有可能 *D2++=*Dl++: 造成系 柳2s'0 printf(%s”,b) } 在上例中使用的是字符指针,虽然源字符串可以用指针变量定义,但目标字符串必须 用字符数组来定义。因为指针变量只能定义一个保存字符串首地址的指针,而没有保存字 符的空间。 课堂教学小结: 通过本讲,使学生能掌握指针与一维数组的关系,熟练使用指针编写一维数组程序

i++; } b[i]= '\0'; printf("%s",b); } 在上例中使用的是字符数组,由于复制的是字符串,所以在字符元素复制完成之后, 要置一个字符串结束标志'\0'。 例 用字符指针实现字符串的复制。 main() { char *a="I love my Motherland !",b[40], *p1, *p2; p1=a; p2=b; printf("%s",p1); while(*p1) *p2++=*p1++; *p2='\0'; printf("%s",b); } 在上例中使用的是字符指针,虽然源字符串可以用指针变量定义,但目标字符串必须 用字符数组来定义。因为指针变量只能定义一个保存字符串首地址的指针,而没有保存字 符的空间。 字符指 针在没 有具体 指向时 以间接 访问形 式赋值 或接收 都是错 误的, 有可能 造成系 统 崩 溃。 课堂教学小结: 通过本讲,使学生能掌握指针与一维数组的关系,熟练使用指针编写一维数组程序

已到末页,全文结束
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档