上机13 指针(2)
上机课时
课内:2课时;课外:2课时
上机类型
验证性上机
上机目的
1) 掌握指针变量的运算。 2) 掌握指针和数组。 3) 掌握指针和字符串。
上机内容
一、 指针变量的运算
1. 指针运算符
前面一次上机我们已经练习过,指针运算符有两种:
1) 取地址运算符(&):取地址运算符(&)是单目运算符,其结合性为自右至左,其功能是取变量的地址。在scanf函数及前面介绍指针变量赋值中,我们已经了解并使用了&运算符。
2) 取内容运算符(*):取内容运算符(*)是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。特别要注意对比:在指针定义阶段,*表示后面定义的变量为指针变量。
指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算及关系运算。下面我们分别进行练习。
- 1 / 8 -
2. 指针变量的赋值运算
下面我们用一个表格总结如下: 类型 把一个变量的地址赋予指向相同数据类型的指针变量 把一个指针变量的值赋予指向相同类型变量的另一个指针变量 把数组的首地址赋予指向数组的指针变量 代码 int a,*p; p=&a; 赋值说明 把整型变量a的地址赋予整型指针变量p,也就是指针p指向了a 指针p1先指向了a 指针p2再指向p1 即:p1和p2都指向了a 指针p指向数组arr的起始地址(也就是数组的第一个元素所在的位置) 内存情况 int a,*p1,*p2; p1=&a; p2=p1; 把字符串的首地址赋予指向字符类型的指针变量 int arr[5],*p; p=arr; 也可写为 p=&arr[0]; 因为数组名代表数组的起始地址; 而数组元素代表变量 char *pc; pc=”I love you”; 指针pc指向存放该字符串的字符数组的首地址。 注意: 1. 字符串中有空格 2. 字符串有结束标志’\\0’ 3. 字符串的长度为9,不是10,因为字符串长度不包含结束标志,这是C语言系统的规定。 3. 指针变量的加减运算
指针变量的加减运算只能对指向数组的指针变量进行,对指向其它类型变量的指针
- 2 / 8 -
变量作加减运算是毫无意义的。
对于指向数组的指针变量,可以加上或减去一个整数n。设pa是指向数组a的指针变量,则pa+n, pa-n, pa++, ++pa, pa--, --pa运算都是合法的。指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1在概念上是不同的。因为数组可以有不同的类型,各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。例如:
4. 空指针
指针变量还可以与0比较。设p为指针变量,则p==0表明p是空指针,它不指向任何变量;p!=0表示p不是空指针。
空指针是由对指针变量赋予0值而得到的。例如:
对指针变量赋0值和不赋值是不同的。指针变量未赋值时,可以是任意值,是不能使用的。否则将造成意外错误。而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。
二、 通过指针引用数组
C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。
- 3 / 8 -
引入指针变量后,就可以用两种方法来访问数组元素了。如果p的初值为&a[0],则:
? p+i和a+i就是a[i]的地址,或者说它们指向a数组的第i个元素。 ? *(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。例如,*(p+5)或
*(a+5)就是a[5]。
? 指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。 根据以上叙述,引用一个数组元素可以用:
? 下标法:即用a[i]形式访问数组元素。在前面介绍数组时都是采用这种方法。 ? 指针法:即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其
中a是数组名,p是指向数组的指针变量,其处值p=a。
- 4 / 8 -
上机任务1 任务要求:定义一个长度为10的整型数组,随机的输入10个数。要求统计该数组中奇数和偶数的个数,并把全部奇数和偶数输出来。分别用下面三种办法实现。 下标法 用a[i]实现 通过数组名 计算元素的 地址a+i - 5 / 8 -
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《C语言程序设计》上机报告13在线全文阅读。
相关推荐: