二维数组指针字符串_第1页
二维数组指针字符串_第2页
二维数组指针字符串_第3页
二维数组指针字符串_第4页
二维数组指针字符串_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、二维数组、指针、字符串数组 数组是由若干相同数据类型相同数据类型的数据所组成的有序有序集合。 数组的声明 int a7; 数组的操作: ai25101347020a 0 1 2 3 4 5 6二维数组二维数组 二维表 数表(数阵,矩阵) 1 2 3 4 5 6学号 语文 数学 外语110010010021101101201.二维数组的定义二维数组的定义: 数据类型 数组名常量表达式常量表达式 例: int a34; 定义了一个3*4(3行4列)的数组。注意注意: 不能写成 int a3,4;的形式。 int a3,4;定义的是一维数组;数组的标志是,每一个代表一维00 01 02 0310 1

2、1 12 1320 21 22 23c+采用这样的定义方式,使我们可以把二维数组看作是一个特殊的采用这样的定义方式,使我们可以把二维数组看作是一个特殊的一维数组:它的元素又是一个一维数组一维数组:它的元素又是一个一维数组。(即即把二维数组的每行看作一个元素) 例例: int a34; 可以把a看成一个一维数组,它有3个元素a0、a1、a2,每个元素又是含4个元素的一维数组。见下图。 a0 - a00,a01,a02,a03a a1 - a10,a11,a12,a13 a2 - a20,a21,a22,a23 此时, a0、a1、a2相当于3个一维数组的名字,上面定义的二维数组可以理解为定义了3

3、个一维数组,即相当于 int a0 4,a1 4, a2 4; c+的这种处理方法很方便,我们在后面会体会到 c+语言中,二维数组中元素在计算机内语言中,二维数组中元素在计算机内存中的存放顺序是:按行存放,即先在内存中的存放顺序是:按行存放,即先在内存中存放第一行的元素,再放第二行的元存中存放第一行的元素,再放第二行的元素素(第一维变化慢,第二维变化快第一维变化慢,第二维变化快)。 例:int a34; 二维数组a在内存中的存放顺序为a00,a01,a02,a03,10,a11,a12,a13,a20,a21,a22,a23 2 二维数组元素的引用二维数组元素的引用 数组名下标下标注意:注意:

4、每维下标从0开始;下标不要超过各维的大小。 例:int a34; 第1行第2列的元素是a01 (也可说成第1行的第2个元素是a01) a23是第3行的第4个元素 a33违法 3 二维数组的初始化二维数组的初始化 对于二维数组有下列初始化方法:(1)分行给二维数组赋初值,如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 这种赋值方法比较直观,把第一对括号内的数值赋给第一行的元素,第二括号内的数值赋给第二行的元素,依此类推。(2)可以将所有数据写在一个花括号内,这时,计算机自动按数组元素在内存中的排列顺序对各元素赋初值。 例:int a34=1,2,3,4,5,6,7,

5、8,9,10,11,12;(3)可以只对数组中部分元素初始化。如: int a34=1,5,9;此处的作用表示:a00元素被赋成1,a10元素被赋成5,a20元素被赋成9,而数组中的其他元素而数组中的其他元素被初始化为被初始化为0(与一维数组的初始化机制相同)(与一维数组的初始化机制相同)(4)如果对二维数组的全部元素初始化,则定义数组时第一维长度可以省略,但第二维长度不能省,如:分行进行初始化,如:int a4=0,0,3,0,10;char c10=c,p,r,o,g,r,a,m,0; 4 二维数组的赋值、输入、输出二维数组的赋值、输入、输出 使用二重循环使用二重循环,对每个元素赋值、输入

6、和输出:对每个元素赋值、输入和输出: for(int i=0;i3;i+) for (int j=0;jaij; aij*=ai j; coutaijendl; 例题1 矩阵的行列互换 将一个二维数组的行列互换,存到另外一个二维数组中。例如: a= 1 2 3 行列互换后放在数组b中,b= 1 4 4 5 6 2 5 3 6 例题2 河图 将19填到九宫格中,使得横竖斜三个方向的三个数之和均为15int main() for(int i=1;i=9;i+) for(int j=1;j=9;j+) a11=5; a00=i; a01=j; a02=15-i-j; a22=15-5-i; a12=

7、15-a02-a22; a10=15-5-a12; a20=15-i-a10; a21=15-a20-a22; if (check() print(); return 0; int check() int flag10=0,0,0,0,0,0,0,0,0,0; for(int i=0;i3;i+) for(int j=0;j0)& !flagaij) flagaij=1;else return 0; return 1; 多维数组多维数组 有了二维数组的基础,再掌握多维数组是不困难的。例如,三维实数数组定义为: 数据类型 数组名常量表达式常量表达式常量表达式; double a234 定

8、义了三位数组,共2*3*4=24个元素。多维数组在内存中的排列顺序类似于二维数组,第一维的下标变化最慢,最右边的下标变化最快。 a000,a001,a002,a003,a010, 指针变量的地址 内存空间的访问方式 通过变量名访问 通过地址访问 取地址运算符:& 例:int var;则&var 表示变量var在内存中的起始地址指针的概念声明声明例:static int i; static int *i_pointer=&i; 指向整型变量的指针概念概念指针:指针:内存地址,用于 间接访问内存单元指针变量:指针变量: 用于存放地址的变量20003i_pointer*i_p

9、ointeri2000内存用户数据区变量 i变量 j变量 i_pointer362000200020043010引用引用例1: i=3;/直接访问例2: *i_pointer=3;/间接访问 变量的指针就是变量的地址;用来存放变量的地址的变量是指针变量。指针变量有时简称为指针指针变量有时简称为指针。 指向:用地址访问变量(间接访问)。 指针运算符 * 例 int a=5; int *p = &a; *p = 6;pa5pa6定义指针变量定义指针变量的一般形式为: 存储类型存储类型 数据类型数据类型 *指针变量名指针变量名例如: int *p1;/p1是指向整形数据的指针变量 stati

10、c int *p2; char *da;/da是指向字符形数据的指针变量指针变量名是指针变量名是p1,而不是,而不是*p1; 定义变量时,在变量名前加一个定义变量时,在变量名前加一个*表示该变量是指针变量表示该变量是指针变量 数据类型数据类型* 是指针(变量)的类型是指针(变量)的类型存储类型存储类型 数据类型数据类型是指针变量的基类型是指针变量的基类型 在定义指针变量时必须指定基类型(指针的运算)在定义指针变量时必须指定基类型(指针的运算)指针变量的初始化和赋值 语法形式 存储类型 数据类型 *指针变量名地址; 指针变量名地址 例: int a,b; int *pa=&a; pa=&

11、amp;a; pa=0; 注意事项 “地址”中存放的数据类型与指针类型必须相符。 向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。 编程序:用指针交换两个变量的值指针变量的引用 在c+语言中有两个有关指针的特别运算符: & :为取地址运算符,&x的值为x的地址。 * :运算符:指针运算符,或指向运算符,也称间接运算符,*p代表p所指向的变量。 注:在指针变量的定义和指针变量的引用中都有*p。两者形式相似,但含义不同:定义时用于指明后面的变量名是指针变量;引用时表示指针变量指向的变量。 在程序中要注意区分下面三种表示方法所具有的不同意义。例如

12、,有一个指针px , px - 指针变量,它的内容是地址量。 *px - 指针的目标变量,它的内容是数据。 &px - 指针变量占用的存储区域的地址。px&px*px 小游戏: int a,*p=&a; &*p &*p与p等价 *&a *&a与a等价指针运算 指针运算是以指针变量所持有的地址值为运算量进行的运算。因此,指针运算的实质是地址的计算。 由于指针是持有地址量的变量这一特性,指针的运算与普通变量的运算在种类上和意义上都是不同的。指针运算的种类是有限的,它只能进行算术运算、关系运算和赋值运算。指针变量的算术运算 指针与整数的加减运算

13、(px+n,px-n) 指针 p 加上或减去 n ,其意义是指针当前指向位置的前方或后方第 n 个数据的地址。 这种运算的结果值取决于指针指向的数据类型p+n的实际操作是:(p)+n*sizeof(数据类型);p-n的实际操作是:(p)-n*sizeof(数据类型); 其中,(p)表示指针p中的地址值,而不是&p,sizeof(数据类型)的长度单位为字节。papa-2pa-1pa+1pa+2pa+3*(pa-2)*pa*(pa+1)*(pa+2)*(pa+3)*(pa-1)short *pa28pb-1pbpb+1pb+2*(pb-1)*pb*(pb+1)*(pb+2)long *pb

14、29 指针加一,减一运算指针加一,减一运算(px+ , px-) 指向下一个或前一个数据。 例如:y=*px+ 相当于 y=*(px+) (*和+优先级相同,自右向左运算) 指针的相减运算:(指针的相减运算:(px-py) 如果两个指针px和py所指向的变量类型相同,则可以对它们进行相减运算。px-py运算的结果值是两指针指向的地址位置之间的数据个数。它执行的运算不是两指针持有的地址值相减,而是按下列公式得出结果。(px)-(py) / 数据长度上式中(px)和(py)分别表示指针px和py的地址值,所以,两指针相减的结果值不是地址量,而是一个整数。 指针的关系运算指针的关系运算 在两个指向相

15、同类型变量的指针之间可以进行各种关系运算。两指针之间的关系运算表示它们指向的地址位置之间的关系。比如: int a;int *p=&a,*q=p 若上面声明的两个指针作p=q运算,其结果为1(true),也即指针p、q指向同一个变量。两指针相等的概念是两指针指向同一位置。 假设数据在内存中的存储逻辑是由前向后,那么指向后方的指针大于指向前方的指针。对于两指针p和q之间的关系表达式:p字符串或字符数组名;字符串或字符数组名; 例: char s20; cins; (2)用cout输出,格式是: cout字符串或字符数组名;字符串或字符数组名; 例:char s20=“this is a

16、string.”; couts; 的输出结果为this is a string.。 也可直接输出字符串,如:cout“this is a string” 注: 字符数组中若没有字符串结束标志,则一直输出到在内存中碰字符数组中若没有字符串结束标志,则一直输出到在内存中碰到到0标志。标志。6.字符串处理函数求字符串的长度求字符串的长度 函数原型 :strlen( const char string ); 功能:计算并返回字符串的长度。字符串复制字符串复制 函数原型 : strcpy(char destination, const char source) 功能: strcpy将字符串复制到字符串变

17、量中,该变量中原有的内容被覆盖。必须保证字符串变量的这个字符数组有足够的单元容纳字符串。 函数原型 : strncpy(char destination, const char source, int numchars); 功能:strncpy,将字符串source中前numchars个字符拷贝到字符串destination中。 字符串连接字符串连接 原型:strcat(char target, const char source);功能:将字符串source接到字符串target的后面,必须保证字符串变量空间足够。 原型:strncat(char target, const char source, int numchars);功能:将字符串source的前numchars个字符接到字符串target的后面 字符串比较字符串比较 调用格式:strcmp(字符串1,字符串2) 功能:比较两者,返回值为0,则相等。为大与0,则字符串1大与字符串2;否则小于。 求子串位置求子串位置 调用格式:strstr(字符串,子串); 功能:在字符串中寻找子串,如找到,返回该字符串的从子串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论