第C语言习题-九章(二维数组)第10章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第九章(二维数组)A:二维数组定义1.定义语句形式:类型名数组名[常量表达式1][常量表达式2]如:inta[3][4];(可看成一个矩阵)在内存中存放顺序为:先放0行,再放1行的元素。2.在C语言中,可把二维数组看成一个一维数组,每个数组元素又包含有若干个元素的一维数组。3.C语言系统把a[0]、a[1]、a[2]作为数组名处理的。B、二维数组元素的引用引用形式:数组名[下标表达式1][下标2]要求:(1)下标值必为整数(2)下标不能越界C、二维数组初始化如:inta[4][3]={{1,2,3,},{…..}}1.当某一对花括号内的初值个数少于该行中元素的个数时,系统自动给该行后面的元素补初值0如:inta[4][3]={{1,2},{4,5},{7},{10}};a[0][2],a[2][1]的初值为03.所赋初值行数少于数组行数时,系统自动给后面各行元素补初值04.赋初值时省略花括号时如:inta[4][3]={1,2,4,5};依照在内存中排列顺序,不足补0a[0][0]=1a[0][1]=2a[0][2]=4a[1][0]=5a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]D、通过赋初值定义二维数组大小1、对于二维数组,只可省略第1个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式(牢记)。如:书上125页2、当用下列形式赋初值时:intc[][3]={1,2,3,4,5};第一维大小按以下规定:(1)当初值的个数能被第二维的常量表达式除尽时;所得商就是第一维大小(2)当初值的个数不能被第二维常量表达式除尽时,则:第一维大小:所得商+1上面:5/3=商1余2+1=2E、二维数组定义和数组元素引用举例(见书126页)F、二维数组和数组元素地址(1)二维数组a由若干一维数组组成,(2)a[0]、a[1]、a[2]都是一维数组名,也是一个地址常量,不能a[0]++等如定义*pa[I]p=a[I]合法a[I]=*(a+I)p=*(a+I)合法(3)二维数组名也是一个地址常量(行指针)(4)数组名a与a[0]的值相同,但基类不同,数组名a基类为具有4个整型元素的数组类型。a+1中1的单位应当是4*2个字节,而不是2个字节。(5)p=a是不合法的,因为p和a基类不同,也不可a++,a—G、二维数组元素地址A[I][j]地址的5种表达式:(1)&a[I][j](2)a[I]+j(3)*(a+I)+j(4)&a[0][0]+4*I+j(5)a[0]+4*I+j&a[0][0]+4*I+j不可写成a+4*I+j因为基类不同,a是行指针H、通过地址引用二维数组元素,若inta[3][4],I,ja数组元素可用以下5种表达式引用(1)a[I][j](2)*(a[I]+j)(3)*(*(a+I)+j)(4)(*(a+I))[j](5)*(&a[0][0]+4*I+j)注意:128页第一段I、通过建立一个指针数组引用二维数组元素Int*p[3],a[3][2],I,j([]优先于*号,因此p是一个数组名,数组p是指针类型,它每个元素都是基类为int的指针,共有3个元素)p[I]=a[I]是合法的具体见128页图9.6指针数组p引用a数组元素如下:(1)*(p[I]+j)*(a[I]+j)(2)*(*(p+I)+j)*(*(a+I)+j)(3)(*(p+I))[j](*(a+I))[j](4)p[I][j]a[I][j]J、通过建立一个行指针引用二维数组元素,有inta[3][2],(*prt)[2](*prt)[2]中,先(*prt)说明prt是一个指针变量,然后再与[2]结合,说明指针变量prt的基类是一个包含有两个int元素的数组,这里prt基类与a相同,prt=a合法。当prt指向a数组开头时,有以下形式引用a[I][j](1)*(prt[I]+j)(2)*(*(prt+I)+j)(3)(*(prt+I))[j](4)prt[I][j]F、二维数组名和指针数组作实参(1)当二维数组作实参时,对应形参必须为行指针变量。对应fun函数首部可有以下三种形式:(1)fun(double(*a)[I])(2)fun(doublea[][N])(3)fun(doublea[m][N])(2)当指针数组作为实参时,对应形参应是一个指向指针的指针。其有以下三种形式(1)fun(double*a[m])(2)fun(double*a[])(3)fun(double**a)特别说明:二维数组名指向行一维数组名指向列(1)列地址如:a[1],a[2](2)行地址(二维数组名)(1)在指向行的地址前面加一个“*”,就转换为列的地址(2)反之,在指向列的指针前面加“&“,就成为指向行的指针如:&a[0]等价&*a表示形式含义a二维数组名,指向一维a[0],即0行首地址A[0],*(a+0),*a0行0列元素地址,(列地址)A+1,&a[1]1行首地址(行地址)A[1],*(a+1)1行0列元素的地址(列地址)A[1]+2,*(a+1)+21行2列元素地址(列地址)*(*(a+1)+2),a[1][2]1行2列元素的值第10章(字符串)A、用一维字符数组存放字符串(1)’\0’作为标志占用存储空间,但不计入串的实际长度(2)C语言中,字符串常量被隐含处理成一个以’\0’结尾的无名字字符一维数组,所以:char*sp,s[10]s=”Hello!”;(不合法)sp=”Hello!”(合法)因为字符串常量在赋值时,给出的是此字符串在内存中所占的连续存储单元的首地址,而s是常量,不可赋值B、通过赋初值的方式给一维字符数组赋字符串(1)记住:如字符数组作字符串使用时,数组大小应比实际字符串多一个元素C、通过赋初值方式使指针指向一个字符串如:char*ps1=”formone”;D、字符串输入输出(1)如:scanf(“%s”,str_adr)其中str_adr可以是:字符数组名,字符数组元素地址或字符指针变量(2)用%s输入时,空格,回车键都作为分隔符,而不能被读入(3)当输入项是数组元素的地址时,输入的字符将从这一元素开始,依次存放在该数组中。(4)当输入项为字符指针时,该指针必须已指向确定的有足够空间的连续存储单元(5)在printf函数中使用%s,可以实现字符串的整体输出。如:printf(“%s”,str_adr)printf函数将从这一地址开始,依次输出字符。E、gets,读入时包括空格,到换行符为止,系统自动用’\0’代替Puts差不多F、用于字符串处理的函数(1)stcpy(s1,s2)返回s1值(即目的的首地址)(2)strcat(s1,s2)(自动覆盖s1串末的’\0’,并返回s1所指地址值)(3)strlen(s)(求串长,但不包括’\0’)(4)strcmp(s1,s2)(字符串大小依据ASCII的值由s1和s2中对应的字符两两进行比较,当第一对不相同的字符时,即由这两个字符出现,决定所在串的大小。

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功