目录
一、二维数组
1.定义:类型 数组名[常量表达式][常量表达式]
- int a[6][6];// 6*6,6行6列
- char b[4][5];// 4*5,4行5列
- double c[6][3];// 6*3,6行3列
2.二维数组的访问
- 数组名[下标][下标]
如:
a[0][0];//访问a数组中第1行第1列的元素
a[1][3];//访问a数组中第2行第4列的元素
a[3][3];//访问a数组中第4行第4列的元素
- 同样需要注意下标的取值范围,以防数组的越界访问。
如:int a[3][4];其“行下标”的取值范围是0-2。“列下标”的取值范围是0-3,超出任何一个下标的访问都是越界访问。
3.二维数组的初始化
(1)由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
代码举例:
#include <stdio.h>
int main()
{
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int i,j;
for(i = 0;i < 3; i++)
{
for(j = 0;j < 4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
(2)为了更直观地表示元素的分布,可以用大括号将每一行的元素括起来:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
或者:
int a[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
(3)二维数组也可以仅对部分元素赋初值:
int a[3][4]={{1},{5},{9}};
代码举例:
#include <stdio.h>
int main()
{
int a[3][4] = {{1},{5},{9}};
int i,j;
for(i = 0;i < 3; i++)
{
for(j = 0;j < 4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
(4)如果希望整个二维数组初始化为0,那么直接在大括号里写一个0即可:
int a[3][4]={0];
若没有对其进行初始化,则读出的值是随机的,如下:
#include <stdio.h>
int main()
{
int a[3][4];
int i,j;
for(i = 0;i < 3; i++)
{
for(j = 0;j < 4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
(5)C99同样增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为0:
int a[3][4] = {[0][0] = 1,[1][1] = 2,[2][2] = 3};
代码举例:
#include <stdio.h>
int main()
{
int a[3][4] = {[0][0] = 1,[1][1] = 2,[2][2] = 3};
int i,j;
for(i = 0;i < 3; i++)
{
for(j = 0;j < 4;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
运行结果:
(6)二维数组的初始化也能价懒,让编译器根据元素的数量计算数组的长度。但只有第1维的元素个数可以不写,其他维度必须写上:
int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
4.代码实战:录入下表的成绩,并实现矩阵转置
代码如下:
#include <stdio.h>
int main()
{
int a[4][5] = {
{80,92,85,86,99},
{78,65,89,70,99},
{67,78,76,89,99},
{88,68,98,90,99}
};
//录入成绩
int i,j;
for(i = 0;i < 4; i++)
{
for(j = 0;j < 5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
//矩阵转置
for(i = 0;i < 5; i++)
{
for(j = 0;j < 4;j++)
{
printf("%d ",a[j][i]);
}
printf("\n");
}
return 0;
}
运行结果:
二、指针(*)
1.指针和指针变量
- 通俗讲,指针就是地址的意思。C语言中有专门的指针变量用来存放指针,它跟普通变量又不同,指针变量存放的是地址,而普通变量存放的是数据。
- 指针变量有类型,它的类型就是存放的地址指向的数据类型
2.定义指针变量:类型名 *指针变量名
- char *pa;//定义一个指向字符型的指针变量
- int *pb;//定义一个指向整型的指针变量
3.取地址运算符和取值运算符
- 如果需要获取基个变量的地址,可以使用取地址运算符(&):
char *pa=&a;
int *pb=&f;
- 如果需要访问指针变量指向的数据,可以使用取值运算符(*):
printf("%c,%d\n", *pa, *pb);
代码举例:
#include <stdio.h>
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
printf("a = %c\n", *pa);
printf("f = %d\n", *pb);
*pa = 'C';
*pb += 1;
printf("now,a = %c\n", *pa);
printf("now,f = %d\n", *pb);
printf("the addr of a is : %p\n", pa);
printf("the addr of b is : %p\n", pb);
return 0;
}
运行结果:
注意:要避免访问未初始化的指针!!