对数组中的元素排序,要求不改变元素的位置(即使用指针指向数组首元素)

上机实验十 指针与数组_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
上机实验十 指针与数组
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。第五章数组与指针;5.1数组;基本数据类型亦称内置数据类型;在内置数据类型和标准库类类型之间是复合类型,特别;数组(array)是一种顺序容器(sequenc;数组元素的访问方式:;通过下标操作符,按元素在数组中的位置进行访问,称;注意:1:数组是一种组合类型,是不能作为一个整体;2:C++数组第一个元素的下标为0,而不是1,且;数组名可以作为函数的参数;C
第五章 数组与指针
基本数据类型亦称内置数据类型
在内置数据类型和标准库类类型之间是复合类型,特别是指针和数组类型。
数组(array)是一种顺序容器(sequence container),是由单一类型元素组成的一个有序集合。
例:int fibon[10]={0,1,1,2,3,5,8,13,21,34};
数组元素的访问方式:
通过下标操作符,按元素在数组中的位置进行访问,称为索引访问或下标访问。
注意: 1: 数组是一种组合类型,是不能作为一个整体进行访问和处理的,只能按元素进行个别的访问和处理。
C++数组第一个元素的下标为0,而不是1,且下标表达方式是固定的。
3:数组元素在内存中是从低地址开始顺序排列,各元素的存储单元占用内存大小相同,各元素的存储单元之间没有空隙,可以从数组第一个元素存储单元的起始地址计算出任意一个元素存储单元的起始地址。
数组名可以作为函数的参数。在函数调用时传递实参数组的首地址,所以在被调函数中对形参数组的处理实际就是对调用函数的实参数组的处理。
C++只传递数组首地址,而对数组边界不加检查。
回溯法(数组的应用)的基本思想是,通过对问题的分析找出解决问题的线索,先在一个局部上找出满足问题条件的局部的解,然后逐步由局部解向整个问题的解的方向试探,若试探成功就得到问题的解,试探失败逐步向后退,改变局部解再向前试探。
回溯法应用广泛,八皇后问题、迷宫问题、四色地图等等都可以用回溯法求解。
5.2 多维数组
一维数组可对应数学中的向量,而二维数组可对应矩阵,可用一个二维数组存储矩阵。 二维数组的横向称为行,纵向称为列。 行与列用常量表达式表示,行在前面,列在后面。
定义二维数组的通用格式为:《存储类型》 类型
数组名[常量行表达式] [常量列表达式]; 二维数组分析:上面的数组可定义为: int mat[3][6];
第一行第一列的元素为mat[0][0],第三行第六列元素为 mat[3][6], 下标仍是从0开始。 计算机内存是一维编址的,多维数组必须要转化为一维方式存储,越右的下标变化越快,二维数组则按行排列
设有a数组m行n列,每个元素占b个字节,a[i][j] 的首地址为:数组的首地址+(i*n+j)*b; 多维数组分析:C/C++ 中的多维数组基本的定义是以数组作为元素构成的数组,二维数组的数组元素是一维数组,三维数组的数组元素是一个二维数组。依此类推,多维数组用的是一个嵌套的定义。
多维数组的数组名代表数组中第一维(最高维)第一个元素(0号元素)在内存中的首地址 多维数组作为参数:在作为函数的形式参数时,可以最高维(第一维)省略。
对多维数组,编译器不检查边界,其实只是不检查最高维(第一维)的边界,较低各维的大小是在控制之中的。
5.3 指针与地址
按变量的地址直接存取变量的方法称为“直接访问”方式。
存贮变量的内存空间的首地址称为该变量的地址。
如果将一个变量的地址放在另一个变量中,则存放地址的变量称为指针(Pointer)型变量。这样存取变量,也可以间接的由指针变量取得该变量的地址进行,称为“间接访问”方式。
由于指针变量中的值是另一个变量的地址,习惯上形象地称为指针变量指向该变量。 指针变量中的值也简称为指针,所以指针就是地址。
指针类型可以按它指向的变量的类型区分。基本类型和非基本类型都有对应的指针类型,包括类(class),甚至还有指针类型(指向指针的指针,二级指针)。
指针类型变量定义:《存贮类型》 类型 *变量名1《,*变量名2…》;
这里*是一个定义变量为指针的说明符,而不是指针变量的一部分。
必须指出的是定义时每一个指针变量都需要一个指针变量说明符。
对指针决不可以任意赋一个内存地址,只能取一个已经分配了内存的变量的地址赋给指针变量。 指针变量中存放的是在内存中可寻址的变量或对象的首地址,而变量或对象的内存地址是由系统来分配的。
与指针相关的运算符:“&”取地址运算符,作用于内存中一个可寻址的数据(如:变量,对象和数组元素等等),操作的结果是获得该数据的地址。非左值。
“*”间接引用运算符,作用于一个指针类型的变量,访问该指针所指向的内存数据。左值。
任何类型的指针都可以赋以0值,称为空指针,表示当前该指针不指向该类型的任何一个变量(对象),而不是指向地址为0的存储单元。
指针的类型可以强制转换
同类型的指针可以相互赋值
对指针变量决不可以任意赋一个内存地址
建议在函数参数传递中,能用“引用”时绝不用“指针”。
指针常量是固定指向一个对象的指针,即指针本身是常量
常量指针是指向“常量”的指针,即指针本身可以改指向别的对象,但不能通过该指针修改对象
常量是不可寻址的,但常变量是可寻址的。
5.4 this指针
当调用一个成员函数时,系统自动产生一个隐藏的指针,这个指针称为this指针,它始终指向产生这个调用的对象,并将该指针作为一个参数自动传递给该成员函数。
this指针的实现:
1.改变类成员函数的定义,用附加参数this指针来定义每个成员函数。
2.每个类成员函数的调用,加上一个附加的实参――被调用对象的地址。
this指针的使用:通常this指针不必写成显式的,但是有时必须写成显式的,如在对复数类的赋值号重载中需要返回当前调用的对象时
静态成员函数没有this指针
5.5 数组与指针的关系
数组名与指针的关系:数组名被看作该数组的第一个元素在内存中的首地址(仅在sizeof操作中例外,该操作给出数组所占内存大小)。
数组名在表达式中被自动转换为一个指向数组第一个元素的指针常量。数组名中所放的地址是不可改变的,所以称指针常量(即隐含说明“元素类型* const数组名”)。
用指针访问数组:指针加1,则地址移动一个数组元素所占字节数。
数组实际访问方式: C++语言的下标运算符[ ]是以指针作为操作数的。无论以下标方式或指针方式存取数组元素时,系统都是转换为指针方法实现。
指针运算的主要规则
指针的算术运算和关系运算,只有当指针是指向数组元素时,这些运算才有意义。 指针变量与整型量的加减表示移动指针
新指针值=原指针值+n*sizeo(指针指向的数据类型)
新的地址是原地址后第n个元素的地址,即指针移动n个元素的位置。
2. 只有当两个同类型的指针变量指向同一个数组时才可以进行减法运算,结果表示由第一个指针所指元素到第二个指针所指元素之间的元素数量。这里数量算头不算尾。
注意:两个指针相加是毫无意义的。
3.当且仅当两个同类型指针变量指向同一数组中的元素时,可以用关系运算符&,==,!=等进行比较,比较规则是指向后面元素的指针大,指向同一元素的相等。
4.指针同样可以进行”++”,”--“运算,运算结果也是指向后一个或前一个数组元素。
将指针用作函数的参数时,传的仍然是值,指针的值,这个值就是指针所指向的变量或对象的内存首地址
函数的返回值也可以是指针
5.6 字符串
字符串是用字符型数组存储的,字符串要求其尾部以’\0’作为结束标志。
用指针输出字符串:C++不对数组的边界进行检测,但字符串有一个结束符’\0’(全0),在程序运行时是可以知道实际串长度的。
字符串处理函数:C++标准库有很多字符串处理函数,在头文件&cstring&中。
最常用的字符串处理函数的代码
1.字符串复制函数 char *strcpy(char *s,const char ct)。
返回值是指向复制后字符串中首字符的指针。
2.串连接函数char *strcat(char *s,const char *ct)。。
将串ct复制到串s的后面,形成一个长串。
3.字符串比较函数int strcmp(const char *cs,const char ct)。
两字符串比较是按字典排序方法进行。
4.求字符串长度函数int strlen(const char *s)。这里求出的串长度不包含串结束符在内。而sizeof运算符包 括 结束符,还包括没有使用的单元。
void指针又称无类型或泛型指针。任何类型的指针都可以赋给void类型的指针变量, string类包含在名字空间std中的头文件&string&。
string类的使用方法:
(1) string类有三个构造函数:
//调用默认的构造函数,建立空串
string str(&OK&);
//调用采用C字符串初始化的构造函数
string str(str1);
//调用复制构造函数,str是str1的复制
(2) string类字符元素的访问比C字符串有所增强:
//返回str中索引i处字符的引用,不查是否出界
//返回str中索引i处字符的引用,查是否出界
(3) string类重载了一些运算符,特别注意当目标串较小,无法容纳新的字符串,系统会自动分配更多的空间给目标串,不必顾虑出界。
str1=str2;
//str1成为str2的代码
str1+=str2;
//str2的字符数据连接到str1的尾部
str1+str2; //返回一个字符串,它将str2连接到str1的尾部
str1==str2;
str1!=str2;
//比较串是否相等,返回布尔值
str1&str2;
str1&str2;
str1&=str2;
str1&=str2;//基于字典序的比较,返回布尔值
(4) string类的输入输出。输出与C风格字符串同样方便,使用插入运算符&&和cout。输入如用提取运算符&&,代码读取的是以空白字符结束的字符串,输入完整的字符串可用非成员函数getline。注意格式:getline(cin,str);
//串以’\n’结束
getline(cin,str,ch);
//串以ch结束
(5) string类有一些常用的成员函数可进行字符串处理:
str.substr(pos,length1);//返回对象的一个子串,从pos位置起,长length1个字符
str.empty();
//查是否空串
str.insert(pos,str2);
//将str2插入str的pos位置处
str.remove(pos,length1); //在str位置pos处起,删除长度为length1的字串
str.find(str1);
//返回str1首次在str中出现时的索引
str.find(str1,pos);
//返回从pos处起str1首次在str中出现时的索引
str.length(str);
//返回串长度
(6) C字符串到string类对象是由构造函数隐式自动进行,而string类对象到C字符串的转换必须执行显示的类型转换,应调用成员函数
str.c_str();
//将string类转换为C风格字符串,返回char*
(7)string类重载了插入和提取运算符,当先输入数值,后输入串时,不必先吸收回车符,不会产生C风格字符串的空串问题。
string类的优点:string类有自己的构造函数和析构函数,如果它作为类或结构的成员,要记住它是成员对象,当整个类对象建立和撤销时,会自动调用作为成员对象的string字符串的构造和析构函数。
自定义字符串类的关键是重载各种运算符。
5.7 多级指针与多维数组
多级指针可对应于多维数组,这种指针变量中存的是另一个指针变量的地址。
指向数组(元素)类型的指针,与一维数组名是等效的
指针有两要素:地址和所指向目标的数据类型。
二维数组是数组元素为一维数组的数组,所以等效的指针类型应该是指向一维数组的指针类型。
指向一维数组的指针的定义如下:数据类型 (* 指针变量名)[n];
这里数组元素的个数n不可省略。因是指向指针的指针,称二级指针。
注意:上下两图表对比
包含各类专业文献、应用写作文书、文学作品欣赏、幼儿教育、小学教育、各类资格考试、行业资料、中学教育、78第5章
数组与指针等内容。 
 复习5--指针和数组_理学_高等教育_教育专区。C++程序设计基础 第五章练习题 1.假定一个一维数组的定义为“char * a[8] ;” ,则该数组所含元素的个数为 ...  C语言第5章数组及答案解析_IT认证_资格考试/认证_教育专区。测试 5 数组及...(6) 答案:B 【解析】考查指向字符串的指针变量。在该题中,指针变量 p 指向...  第5章 数组_计算机软件及应用_IT/计算机_专业资料。第 5 章 数组一、选择题...用数组 r 存储静态链表, 结点的 next 域指向后继, 工作指针 j 指向链中结点...  第5章数组与指针复习与习题... 暂无评价 11页 2财富值 第七章字符数组与指针练习... 9页 2财富值 指针与数组补充习题 9页 2财富值 数组和指针习题 19页 ...  第五章 C++数组和指针 42页 免费 第5章 指针 27页 2财富值 第5章指针 61页 1财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请...  第5章 指针与结构 主要内容:指针概念与指针的简单运用;指针与数组(一维、二维数组) ,指向字符串的指 针;结构的定义与引用,结构数组的运用。 教学要求: ? ? ?...  第五章 数组与指针习题 1 第五章 数组与指针习题一、.基本概念与基础知识自测题 5.1 填充题 5.1.1 数组定义时有三个要素:数组名,数组元素的 (1) 和数组...  第五章 数组与指针习题 第五章 数组与指针习题一、.基本概念与基础知识自测题 基本概念与基础知识自测题 5.1 填充题 5.1.1 数组定义时有三个要素:数组名,数...  第4章 数组与指针 82页 2财富值 指针与数组的关系 2页 1财富值 指针数组 11页 免费 指针与数组的异同 5页 1财富值如要投诉违规内容,请到百度文库投诉中心;...

我要回帖

更多关于 指向数组元素的指针 的文章

 

随机推荐