《C语言程序设计》上机报告13
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》上机报告13
上机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 -
感谢您的阅读,祝您生活愉快。