计算机程序设计基础_精讲多练cc++_第6章

上传人:wm****3 文档编号:56926564 上传时间:2018-10-17 格式:PPT 页数:48 大小:941.50KB
返回 下载 相关 举报
计算机程序设计基础_精讲多练cc++_第6章_第1页
第1页 / 共48页
计算机程序设计基础_精讲多练cc++_第6章_第2页
第2页 / 共48页
计算机程序设计基础_精讲多练cc++_第6章_第3页
第3页 / 共48页
计算机程序设计基础_精讲多练cc++_第6章_第4页
第4页 / 共48页
计算机程序设计基础_精讲多练cc++_第6章_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《计算机程序设计基础_精讲多练cc++_第6章》由会员分享,可在线阅读,更多相关《计算机程序设计基础_精讲多练cc++_第6章(48页珍藏版)》请在金锄头文库上搜索。

1、第六章 指针和引用,3,教学目标,(1) 了解指针类型及引用类型的概念及二者的关系与区别; (2) 了解指针与引用变量的使用与操作方法; (3) 了解用指针访问变量、数组、字符串的方法。,4,基本内容,6.1 指针 6.2 指针与数组 6.3 引用,5,6.1 指针,6.1.1 地址 6.1.2 指针的定义 6.1.3 指针的初始化 6.1.4 指针的使用 6.1.5 函数的传址调用方式,6,6.1.1 地址,计算机的内存储器就象一个一维数组,每个数组元素就是一个存储单元。 地址是存放信息数据的内存单元的编号。 程序中定义的任何变量、数组或函数等,在编译时都会在内存中分配一个确定的地址单元。,

2、7,如何表示地址?,凡是存放在内存中的程序和数据都有一个地址,可以用它们占用的那片存储单元中的第一个存储单元的地址表示。C+规定: 变量的地址: 可以用取地址运算符& 来获取 数组的地址: 可以用数组名表示 函数的地址: 可以用函数名表示,8,例6-1:取地址运算符&和指针运算符*,#include using namespace std; int main() int x = 100;cout “变量的值是:“ x endl;cout “变量的所在的地址是:“ ,9,6.1.2 指针的定义,数据类型 *指针变量名; 例:int * ptr; float *array; char *s1,*s

3、2;说明: 数据类型是指针所指向变量的类型; *是一个说明符,它不是指针变量名的一部分,而是表示这里说明的是一个指针; 指针变量名是指针变量的名字,10,6.1.3 指针的初始化,指针在定义后必须初始化才能使用;否则,结果不确定。 指针初始化的一般格式:数据类型 *指针变量名 初始地址值; 或 数据类型 *指针变量名;指针变量名 = 数据对象地址; 其中数据对象地址可以是变量、数组、函数、结构等的地址。如: int x=7; int *ptr= /初始化为空指针,11,6.1.4 指针的使用,/ 例6-2:通过指针访问变量 #include using namespace std; int m

4、ain() int x = 7;int *ptr; ptr = ,12,6.1.5 函数的传址调用方式,实参与形参有3种结合方式: 值调用、传址调用和引用调用 传址调用赋予了函数操作“异地”数据的权利,对函数的独立性有一定影响 传址调用可实现多值传递 使用传址调用方式时,被调用函数的形参是指针,与之对应的实参要用地址值。,13,例6-3 交换两个变量的值,算 法: 交换两个变量x和y的值一定要用到第三个变量t作周转:t = x;x = y;y = t;,14,交换两个变量的值(修改前的程序),void swap(int x,int y) int tmp;tmp = x; x = y; y =

5、tmp; int main() int x = 2, y = 3;cout“x=“x“,y=“yendl;swap(x, y);cout“After exchange x ,15,交换两个变量的值(修改后),#include using namespace std; void swap (int *xp, int *yp) int tmp;tmp = *xp; *xp = *yp; *yp = tmp; int main() int a = 2, b = 3;cout “Before exchange:a= “ a “,b= “ b endl;swap(a, b);swap(*a, *b);s

6、wap( ,运行结果: Before exchange:a=1,b=2 After exchange:a=2,b=1,16,6.2 指针与数组,6.2.1 指针与一维数组 6.2.2 指针与字符串,17,6.2.1 指针与一维数组,计算机中处理数组时,实际上是将ai转换成*(a+下标表达式值)的形式。即ai *(a+i)因为数组名可以表示该数组的首地址,所以:ai *(a+i) *(ptr+i)其中,ptr是指向a的指针。由此可见,用指针处理数组及元素是最快捷的方式,18,例6-4 用多种方法输出数组元素,#include using namespace std; int main() int

7、 a=1, 2, 3, 4, 5; / int *ptr; / ptr = a; for(int i=0; i5; i+)coutai“t“; /一般方法:使用数组名和下标 / cout*(a+i)“t“; /使用数组名和指针运算 /* cout*ptr“t“; /使用指针变量的方法ptr+; */ coutendl;return 0; ,19,直接和间接使用变量,20,6.2.2 指针与字符串,指针-字符数组(字符串) 例题分析 设 char *string; char string14; string=string1; 有 string10 = = *string string11 = =

8、 *(string+1),21,例6-5:计算字符串长度,#include using namespace std; int mystrlen(char *string) char *ptr=string; while(*ptr!= 0)ptr +; / 指针后移,直到指向字符串结束标志return ptr-string; int main() char str = “How long am I?“;coutstr“ 的长度是“mystrlen(str)n;int *p =new intn+1;p0=0;p1=1;coutp0tp1t;for(int i=2; i=n; i+)pi=pi-2+

9、pi-1;coutpi结构体指针变量名-成员变量名 例: Student stu1, stu2, *ptr = ,35,结构体的初始化,可采用以下任意一种方式: 先声明结构体变量,再赋初值 Student stu1; stu1.id = 20086035; strcpy(stu1.name, “Zhang3“); stu1.score = 96; 声明时赋值:在声明结构体变量的同时对其赋初值Student stu2=20091001, “Li4“, 85.5; 注意:不能在定义结构体类型时给成员变量赋值,/ 例 6-9:学生信息-结构体 #include #include using name

10、space std; struct Student int id; / 学号char name20; / 姓名float score; / 成绩 ; int main() Student stu1, stu2=20091001, “Li4“, 85.5;stu1.id=20086035;strcpy(stu1.name, “Zhang3“);stu1.score=96;cout“第1个学生信息:“stu1.id“t“stu1.name“t“stu1.scoreendl;cout“第2个学生信息:“stu2.id“t“stu2.name“t“stu2.scoreendl;stu2=stu1;cout“复制后第2个学生信息变为:“endl;cout“第2个学生信息:“stu2.id“t“stu2.name“t“stu2.scoreendl;return 0; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号