二维数组
-
格式: 数据类型 数组名称[一维数组的个数][一维数组中元素的个数]
- 数据类型:一维数组中存储数据的类型;
- 数组名称:标识符
- 一维数组的个数:表示当前二维数组中包含多少个一维数组
- 一维数组中元素的个数:表示当前二维数组中国每一个一维数组元素的个数
int a[2][3] = {{1,3,5},{7,9,11}}; // 可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
- 二维数组的遍历
for(int i = 0; i < 2; i++){ // 外循环取出一维数组
for(int j = 0; j < 3; j++){ // 内循环取出一维数组的每个元素
printf("a[%i][%i] = %i\n", i, j, a[i][j]);
}
}
- 注意: 必须强调:a[0],a[1]不能当做下标变量使用,他们是数组名,不是一个单纯的下表量
二维数组的初始化
- 定义的同时初始化
// 定义的同时初始化
int nums[2][3] = {{1,3,5},{2,4,6}};
- 先定义后初始化
int nums[2][3];
nums[0][0] = 111;
nums[0][1] = 111;
nums[0][2] = 111;
nums[1][0] = 111;
nums[1][1] = 111;
nums[1][2] = 111;
- 完全初始化\部分初始化,可以省略第一维的长度(不推荐使用);
int a[][3] = {{1,2,3},{4,5,6}};
- 注意不能省略一维数组元素的个数
int nums[2][] = {{1,3,5}{2,4,6}}; // 会报错
二维数组的存储
- 给数组分配存储空间从内测地址大开始分配
- 给数组元素分配空间,从所占用内存地址小的开始分配
- 往每个元素中存储数据从搞地质开始存储
#include <stdio.h>
int main()
{
char cs[2][3] = {
{'a', 'b', 'c'},
{'d', 'e', 'f'}
};
// cs == &cs == &cs[0] == &cs[0][0]
printf("cs = %p\n", cs); // 0060FEAA
printf("&cs = %p\n", &cs); // 0060FEAA
printf("&cs[0] = %p\n", &cs[0]); // 0060FEAA
printf("&cs[0][0] = %p\n", &cs[0][0]); // 0060FEAA
return 0;
}
![](https://img.haomeiwen.com/i647982/de7b30c68dc22410.png)
二维数组与函数
- 传递参数时的注意点:
- 一定要记住,不要管实参传递是什么,只看形参就可以了
- 如果形参是基本数据类型,那么在函数内修改形参不会影响到外界的实参
- 如果形参是数组,那么在函数内修改形参会影响到外界的实参;
#include <stdio.h>
void change(char ch){
ch = 'T';
}
void change2(char ch[]){
ch[0] = 'T';
}
void change3(char ch[][3]){
ch[0][0] = 'T';
}
int main()
{
char names[2][3] = {{'c','w','w'},{'p','j','j'}};
printf("char[0][0] = %c\n", names[0][0]); // c c c
//change(names[0][0]); // 基本类型,不会影响到外面的实参;
//change2(names[0]);
change3(names);
printf("char[0][0] = %c\n", names[0][0]); // c T T
return 0;
}
- 注意点:
- 形参的写法: 二维数组不可以省略列数
void test(char cs[2][]) // 错误写法 { printf("我被执行了\n"); } void test(char cs[2][3]) // 正确写法 { printf("我被执行了\n"); } void test(char cs[][3]) // 正确写法 { printf("我被执行了\n"); }
- 二维数组作为函数参数,在被调函数中不能获得其有多少行,需要通过参数传入
void test(char names[2][3]){ int row = sizeof(names); // 4,或8 printf("row = %i\n", row); }
- 二维数组作为函数参数,在被调用函数中可以计算出二维数组有多少列
void test2(char names[2][3]){ size_t col = sizeof(names[0]); // 3 printf("row = %i\n", col); }
网友评论