文档视界 最新最全的文档下载
当前位置:文档视界 › c语言基础知识12

c语言基础知识12

int a[8],i,*p;
a[i]
*(a+i)
// p=&a[0];// p=a;
p[i]
*(p+i)





第一部分:二维数组的定义、赋值、引用
1.二维数组定义的一般形式:
类型名 二维数组名[常量表达式1][常量表达式2];
例如: int a[2][4];
*** int --- 类型名
a --- 二维数组的数组名。
2 --- 行下标。(一维的大小)
4 --- 列下标。
***当定义一个二维数组的时候,编译系统将自动为其开辟一个指定大小的存储空间。(如图)
---定义多个数组: float a[2][4],b[3][6],w[5][50];
---其他变量一起定义: double x,a[8],w[3][6],*p;
2.二维数组的引用的一般形式:
二维数组名[常量表达式1][常量表达式2]
例如:int a[5][50],i,j;
a[i][j]
*** 常量表达式必须为整型的常量表达式。
3.二维数组的初始化:
---完全赋值:
*** 分段式:
例如: int a[2][4]={{1,2,3,4},
{5,6,7,8}
};
>>编译系统将自动的把a[0][0]=1....a[0][3]=4
a[1][0]=5....a[1][3]=8
*** 线性: int a[2][4]={1,2,3,4,5,6,7,8};
---不完全赋值:
***缺省列:
例如: int a[2][4]={{1,4},
{5,6,8}
};
>>> int a[2][4]={1,4,5,6,8};
***缺省行
例如: int a[3][4]={{1,2,3,4},
{5,6,7,8}

};
***缺省行列:
例如: int a[3][4]={{1,4},
{5,6,8}
};

---通过完全赋值来确定一维的大小:
一维大小=元素的个数/列下标
&&&:如果能整除一维大小=商。
&&&:如果不能整除一维大小=商+1
例如: int a[ ][4]={3,5,4,6,5,4,8,5,8,9,3,5,6,3,8,5,8}
***说明在二维数组中行大小可以省略,但列下标是不能省略的。
4.二维数组的浏览: for嵌套来实现的:
例如: int a[5][6],i,j;
for(i=0;i<5;i++)
for(j=0;j<6;j++) a[i][j];
例如1:编写程序,通过随机函数给一个含所有5*6的二维数组赋值,然后按行为单位进行输出。
#include
#include
#define M 5
#define N 6
void main()
{ int a[M][N],i,j;
//通过随机函数给二维数组赋值:
for(i=0;ifor(j=0;j//以行为单位进行输出。
for(i=0;i{ for(j=0;jprintf("\n");
}

}

第二部分:二维数组和指针
例如: int a[2][4];
1.二维数组的首地址: 把二维数组中第一个元素的地址就叫做该二维数组的首地址。&a[0][0]
2.当定义一个二维数组的时候,数组名就确定了,二维数组名也是一个地址常量。代表了该二维数组中第一个元素的地址:a--&a[0][0]
3.二维数组元素几种常用的引用形式:
int a[5][50],i,j;
***(1)正常

格式: a[i][j]
***(2) *(a[i]+j)
a[i]----> *(a+i)
a[i][j]----(*(a+i))[j]
***(3) (*(a+i))[j]
***(4) *(*(a+i)+j)
4.指针数组:
---指针数组定义的一般形式:
类型名 *指针数组名[常量表达式];
例如: int *p[3];
***定义了一个一维数组p,该数组中含有3个指针变量,且这三个指针分别指向了三个类型为int的数据。
---指针数组和二维数组的关系:
例如: int a[3][2],*p[3],i;
for(i=0;i<3;i++) p[i]=a[i];
***指针数组中的每个指针都指向了其对应的二维数组的对应行,也就是说,指针数组中的每个指针都存放其对应行的首地址。
---看看指针数组对二维数组元素的引用:
如果: for(i=0;i<3;i++) p[i]=a[i]; 成立:
a[i][j] ------- p[i][j]
*(a[i]+j) ------- *(p[i]+j)
// p[i]----> *(p+i)
p[i][j] ------- (*(p+i))[j]
*(p[i]+j) ------- *(*(p+i)+j)

5.行指针:
-- 行指针定义的一般形式:
类型名 (*行指针变量名)[常量表达式];
例如: int (*q)[2];
*** 定义了一个指针变量q,该指针变量一次可以指向两个类型为int的元素。
-- 行指针和二维数组的关系:
例如: int a[3][2],(*q)[2];
q=&a[0][0];//q=a;
-- 通过行指针来引用二维数组中的元素:
如果: q=a;成立
a[i][j] ----------- q[i][j]
*(a[i]+j) ----------- *(q[i]+j)
(*(a+i))[j] ----------- (*(q+i))[j]
*(*(a+i)+j) ----------- *(*(q+i)+j)

第三部分:二维数组和函数
1.二维数组名作实参
---当实参为二维数组名时,形参必为指针,并且这个指针应指向数组,指向数组的指针变量为行指针。形参对应格式,即行指针应为:(*a)[N]
---行指针也可以表示成a[M][N]
---行的表达式可以缺省 a[ ][N]
2.指针数组做实参
---由于指针数组中每个元素均为指针,因此对应形参应当是指向指针的指针 **a
---与指针数组表示方式相同*a[M]
---缺省 *a[ ]
例如:编写程序通过调用随机函数给5*6的二维数组元素赋0—40的整数,求出二维数组每行元素的平均值

6 8 7 4 6 5
1 5 3 4 9 8
7 4 3 5 1 6
5 4 9 8 5 4
1 3 5 1 5 6
#include
#include
#define M 5
#define N 6
void fun(int (*a)[N],int *b)
{ int i,j,av;
for(i=0;i{av=0;
for(j=0;jb[i]=av/N;
}
}
void main()
{ int a[M][N],i,j,b[M];
//通过随机函数给数组赋值:
for(i=0;ifor(j=0;j//输出二维数组中的元素值:
for(i=0;i{for(j=0;jprintf("\n");
}
printf("\n");
fun(a,b);
for(i=0;iprintf("\n");
}

第四部分:数

组的综合应用(排序问题)
例如1:编写程序,通过随机函数给含有6个元素的一维数组赋值,然后进行排序。
8 7 3 5 2 9
#define M 6
2 8 7 5 3 9 以第一个位置为基点:
2 3 8 7 5 9 以第二个位置为基点:
2 3 5 8 7 9 以第三个位置为基点:
2 3 5 7 8 9 以第四个位置为基点:
2 3 5 7 8 9 以第五个位置为基点:
for(i=0;ifor(j=i+1;jif(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}

#include
#include
#define M 8
void fun(int *a)
{ int i,j,t;
for(i=0;ifor(j=i+1;jif(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
void main()
{ int a[M],i;
// 给一维数组赋值
for(i=0;i//输出数组中元素的值:
for(i=0;iprintf("\n\n");
fun(a);
for(i=0;iprintf("\n\n");
}

















相关文档