c语言之数组
1.一维数组
怎样定义一维数组
- 为n个变量连续分配存储空间
- 所有的变量数据类型必须相同
- 所有变量所占的字节大小必须相等
一维数组名不代表数组中所有的元素,
一维数组名代表数组第一个元素的地址
1.1 初始化
完全初始化:
int a[5]={1,2,3,4,5};
不完全初始化,未初始化的元素自动为零
int a[5]={1,2,3};
不初始化,所有元素是垃圾直
int a[5];
清零
int a[5]={0};
只有在定义苏胡子的同时才可以整体复制,其他情况下整体赋值都是错误的
如: int a[5];
a[5]={1,2,3,4,5}; //错误
int a[5]={1,2,3,4,5};
int b[5];
如果要把a数组中的值全部复制给b数组
错误的写法:
b=a;//错误
正确的写法:使用循环语句赋值
#include <stdio.h> int main(void) { int a[5] = { 1,2,3,4,5 }; int b[5]; for (int i = 0;i < 5;i++) { b[i] = a[i]; } return 0; }
#include <stdio.h> int main(void) { int a[5] = { 1,2,3,4,5 }; for (int i = 0;i < 5;i++) { printf("%d\n", a[i]); } return 0; }
数组倒序输出
#include <stdio.h> int main(void) { int a[7] = { 1,2,3,4,5,6,7 }; int i, j, t; printf("处理前的原数组为:"); for (i = 0;i < 7;++i) printf("%d\t", a[i]); printf("\n"); i = 0; j = 6; while (i < j) { t = a[i]; a[i] = a[j]; a[j] = t; i++; j--; } printf("倒序输出的结果为:"); for (i = 0;i < 7;++i) printf("%d\t", a[i]); printf("\n"); return 0; }
2.二维数组
int a[3][4];
总共是12个元素,可以当做3行4列看待,这12个元素的名字依次是
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[i][j] 表示第i+1行 第j+1列的元素
int a[m][n];该二维数组最大位置的元素只能是a[m-1][n-1]
2.1 初始化
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}
};
#include <stdio.h> int main(void) { int a[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; //输出数组内容 for (int i = 0;i < 3;i++) { for (int j = 0;j < 4;j++) { printf("%d\t", a[i][j]); } printf("\n"); } return 0; }
3.多维数组
是否存在多维数组
不存在
因为内存是线性一维的
n维数组可以当做每个元素是n-1维数组的一维数组
比如:
int a[3][4];
该数组是含有3个元素的一维数组
只不过每个元素都可以再分成4个小元素
int a[3][4][5];
该数组是含有3个元素的一维数组
只不过每个元素都是4行5列的二维数组