南开大学C++课件 第 6章a 指针,引用与动态内存分配

更新时间:2023-04-24 05:47:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

第 6章 指针,引用与动态内存分配

6.1 6.2 6.3 6.4 6.5

选择排序算法 指针类型 指针与动态内存分配 引用类型 程序实例

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1

选择排序算法

C++语言也为用户对于变量所占空间的地址提供了进 行操作的机制,这就是指针类型和引用类型。指针和 引用不是一种独立的数据类型,而是一种导出数据类 型。指针类型也是C语言和Pascal语言的重要类型, 而引用类型是C++语言中新的重要类型,在Java语言 和C#语言等一些新的语言中,引用类型取代了指针类 型 排序的任务是把已经存在一个数组里的n 个数按从 大到小的顺序排列,可以采用多种不同的方法实现, 选择排序算法的思路简单,容易理解,每次总是从无 序的序列中选出最大者,交换到序列的左端,于是, 无序的序列越来越短,经过n-1步,达到排序的目的。

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1void ssort(float *, int ); //原型说明 void main(void){ int i, seed, n=20; cout<<endl<<"seed=" ; cin>>seed; cout<<endl; srand(seed); float list[20], *pf; for(i=0; i<n; i++) { list[i] = rand( ); cout<<setw(8)<<list[i]; if ((i+1)%8==0) cout<<endl;} i=0; cout<<endl; pf=&list[0]; ssort (pf,n); while ( i<n ) { cout<<setw(8)<<list[i]; i++; if (i% 8 == 0) cout<<endl; } cout<<endl;

选择排序算法void swap1(float *a, float *b) { float temp; temp = *a; *a = *b; *b = temp; } void ssort (float *a, int m) { int i, j, index; float elem; for (i=0; i<m-1; i++){ elem = *(a+i); index = i; for (j=i+1; j<m; j++) if (*(a+j)>elem){ elem = *(a+j); index = j; } swap1(a+i, a+index); } }

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1

选择排序算法

运行结果:

seed=6523 21339 28822 26220 8712 18120 1280 27491 8647 7137 2030 24101 20505 4452 26942 10989 29919 27130 20996 17227 13559 29919 28822 27491 27130 26942 26220 24101 21339 20996 20505 18120 17227 13559 10989 8712 8647 7137 4452 2030 1280

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1

选择排序算法

这个程序重点是介绍函数ssort( ) 和swap1( ) 的设计, 主函数做了三件事: 1)为长度为n的数组list[n]输入n个随机数,作为 排序算法处理的对象 2)调用函数ssort()进行排序。 3)把经过排序的数组list[20]的值输出。 函数swap1( ) 的定义中使用了指针类型的参数。 参数a,b 是float 型的指针变量,即它们的值应 是浮点型变量的地址。5

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1

选择排序算法

在函数swap1( )中使用了*a 和*b,这里符号‘*’不是乘 法运算符,而是表示指针变量(a 或b)所指向的那个变 量。 例如: int n=4, *p; p=&n; *p++; 表示有整型变量n,和整型指针变量p,用&n 表示变量n 的 地址,p=&n 使指针p 指向变量n,而这时*p 正是表示变量 n,*p++相当于n++ ‘&’和‘*’是一对用于指针操作的互逆的单目运算符, (在这里‘&’不是 引用 的意思)。&n 表示变量n 的 地址,而*p 表示指针p 指向的变量或该变量的值。6

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1

选择排序算法

函数s

wap1(float *a,float *b){…}, 与5.2.5中 介绍的swap(int &a, int &b){…} 函数作一比 较,虽然它们都达到交换两个变量内容的目的, 但采用的方式却是不同的。 在swap1( ) 中有两个指针型参数,属于赋值形 参,在调用时创建两个新的指针变量a 和b,把实 参表达式计算的结果地址赋给a 和b,从而使指针 a 和b 指向相应的变量。而在swap( )中形参a,b 为引用型,它是在调用时直接由实参的变量代替 a,b 参加swap( )函数的函数体操作。7

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.1

选择排序算法

函数ssort( ) 是一个用于对m 个浮点数组进行排 序的函数,其参数为 float 型指针和int 型整 数。前者指明数组的首地址,后者为数组中元素 的个数,执行结果是把这个数组中的浮点数按从 大到小的顺序排列好。 把n个数排好次序可以有许多种不同的算法,这 个函数是每次把尚未排好的元素中的最大元素选 出,移到左端,最终形成从大到小的排列,故被 称为选择排序算法。8

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.2

指针类型 --

指针类型的变量说明格式为:<类型名> * <指针变量名1>, * <指针变量名2>, ... ;

例如: int i=3; int *pi; //pi为int*型变量,其取值为一个int型变量的地址, //也称pi为指向int型数据的指针变量(简称指针)9

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

pi = &i; //&作单目算符时为 取变量地址 , //此处将变量i的地址赋给指针变量pi cout<<*pi; //输出:*pi之值即3 // * 作单目算符时为 取内容 //(取指针所指向的那一变量的内容) *pi = 123; //给pi所指向的那一变量,既i, //赋值123(等同于: i=123;) float *pn=NULL;// NULL 的指针变量,规则规定NULL 与

整数0 通用,它是唯一可以赋给任一类型指针变量的值,表 示当前该指针未指向任一变量。因此,一个指针变量,可有 三种状态: 未赋任何值, 悬空 状态。 NULL值。未指向任一变量。 指向某一变量10

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

读如下程序,看执行后会显示出什么结果?#include <iostream.h> void main(){ int i,j; int *pi, *pj; i = 3; j = 6; pi = &i; pj = &j; cout<<"i,j="<<i<<", "<<j<<endl; cout<<"*pi,*pj="<<*pi<<", "<<*pj<<endl; *pi = 123; *pj = *pi + 2; cout<<"*pi,*pj="<<*pi<<", "<<*pj<<endl; cout<<"i,j="<<i<<", "<<j<<endl; }11

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

程序执行后的显示结果如下: i,j=3, 6 *pi,*pj=3, 6 *pi,*pj=123, 125

i,j=123, 125

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

6.2

指针变量的操作(运算) --

1. 取地址运算&和取内容运算*

注意如下3处出现的*pi,它们的含义不相同:int i=23, *pi=&i; cout<<*pi; *pi=56;

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

第一行的 *pi”处于变量说明处,是说明pi为 int*”型 变量,并同时将该指针变量初始化为i的地址。不可将此处的 * 理解为 取内容 运算,它与前面的int联合起来以说明 pi为 int*”型变量。 第二行的 *pi”表示指针变量pi所指向的那一变量(即i) 的内容(*理解为

取内容 运算,使用其值)。

第三行的 *pi”为左值(存储空间概念),表示要改变指 针变量pi所指向的那一变量(即i)空间中的内容(使用其存 储空间)。14

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

例:int a = 5; 定义整型变量 a 有两个值:

内容

地址

1、该变量内容 5; a 5 2、该变量在内存中的地址;它被表示为&a。 1000H int *pa = &a;pa 1000 用 * 定义的整型指针变量 pa 也有两个值: 2000H 1、内容为变量a在内存中的地址,即&a;

2、变量pa在内存中的地址;它被表示为&pa。 3、pa 是一个指向变量a 的指针。变量a 与指针pa 的关系图15

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

2. 数组指针的算术运算

1) 若p为指针,已指向数组的某一元素,则 p+i(或p-i,其中i为正整数)也为一指针,它指向当 前p已指元素的后面(或前面)第i个元素。例1: int a[10]; //任一数组名字a都是一个常量指针, //代表数组的首地址, 也即, a总等同于&a[0]16

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

则,无论何时, 下述两种表示数组元素a[i] 的方式总是相同的: a[0] <==> *a a[1] <==> *(a+1) ... a[9] <==> *(a+9) 另,下述两种表示数组元素a[i]之地址的方式 也总是相同的: &a[0] <==> a &a[1] <==> a+1 ... &a[9] <==> a+917

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

例2: int a[10]; int* pa=a; //pa为变量指针,此时pa与a //均指向数组a的首元素则,下述三种表示数组元素a[i]的方式是等 同的: a[0] <==> *a <==> *pa a[1] <==> *(a+1) <==> *(pa+1) ... a[9] <==> *(a+9) <==> *(pa+9)18

此为南开大学计算机专业C++课件。供初学者参考。教学用书:高等教育出版社,《高级语言C++程序设计》,刘璟 周玉龙编著,《高级语言 C++程序设计实验指导》周玉龙,高教出版社,2006,十五国家重点教材 课程简介:学习一门必须熟练掌握的、用来与计算机进行“沟通”、指挥计算机为我们做事情的程序设计语言,是其他多门必修课程的前导课程。该学期主要学习C++语言非面向对象部分的内容,其中包括表达式、各种语句、分支与

另,下述三种表示数组元素a[i]之地址的方式 也是等同的: &a[0] <==> a <==> pa &a[1] <==> a+1 <==> pa+1 ... &a[9] <==> a+9 <==> pa+9 而 pa+=3; 及 pa--; 也 都 为 正 确 的 句 子 ( 但 , a+=3; 及 a--; 却都是不正确的句子! 为什么?)。19

本文来源:https://www.bwwdw.com/article/icxq.html

Top