数组的本质是数据集合,我们在程序里面操作数组,就是在操作数据
数组中的元素能不能是其他程序元素?
这个说法只是表示数组里面的元素是int 类型 而这个数组的类型是 int [5] 由元素类型和数组大小共同决定
int a[10] = {0}; // a的类型 : int[10]
int b[5]; // b的类型 : int[5]
int i = 0;b = a; //这样写错误,因为数组名可以看作常量,不能出现在赋值符号的左边printf("sizeof(int[5]) = %d\n", sizeof(int[5]));
printf("sizeof(int[10]) = %d\n", sizeof(int[10])); //sizeof是用来获取占用内存的字节数for(i=0; i< 10;i++)
{ b[i] = a[i]; //这样写错误,因为越界了 也可以从数组的类型来解释
}
数组它是有自己特别的类型的
数组名为: Name 数组大小: [N1] 数组里面元素的类型: type [N2]
1表示 第一维
2表示 第二维
二维数组就是数组的数组 我们得知道数组里面元素的具体类型 而数组的类型由2个要素组成,第一个要素是 具体的变量的类型 int 第二个要素 就是大小 [4]
C语言里面只有一个数组的概念,多维数组是我们扩展出来的,为了与扩展出来的多维数组区别开来,就把之前所学到的数组叫做一维数组
int a[][3] = {{1,2},{3,4}}; //对0号元素和1号元素进行初始化,对0号元素而言给出了2个值,1号元素也出了2个值,如果有第三个值,那么这个没有被给定初始值的元素打印为0
int s1 = sizeof(a) / sizeof(a[0]); //2
int i =0;
int j =0;printf("s1 = %d\n", s1);
printf("sizeof(a) = %d\n", sizeof(a)); //a 所占用的内存数是24个字节
printf("sizeof(a[0]) = %d\n", sizeof(a[0])); //a中第0号元素占用的内存是12个字节 因为a[0] 的类型是int[3], 是一个数组类型 这个数组有3个元素,每个元素为int 3*4 = 12 a[1] 所占用的内存也为12个字节for(i=0; i<s1; i++)
{for(j=0; j<3;j++){printf("a[%d][%d] = %d\n", i,j,a[i][j]); //数组的数组可以看作数学里面的矩阵//因此,可以使用 2 个下标访问矩阵中的值}
}
int a[][3] = {1, 2,3, 4};
继续改进,不要让出现警告
二维数组编程练习
int a[3][3];
int i =0;
int j =0;for(i=0; i<3; i++)
{for(j=0; j<3;j++){printf("Input a[%d][%d]: ", i ,j); scanf("%d", &a[i][j]);}
}printf("Matrix:\n");for(i=0; i<3; i++)
{for(j=0; j<3;j++){printf("%d: ", a[i][j]); }printf("\n");
}for(i=0; i<3; i++)
{for(j=0; j<3;j++){if(i < j){int t = a[i][j];a[i][i] = a[j][i];a[j][i] = t;} }
}printf("Matrix-T:\n");for(i=0; i<3; i++)
{for(j=0; j<3;j++){printf("%d: ", a[i][j]); }printf("\n");
}
不管如何扩展成几维数组,C语言中只有一种类型的数组,当数组里面的元素是另一个数组的时候,就变成了多维数组,为了和多维数组这个概念区别开来,C语言里面的数组又叫做一维数组
如果说数组里面的元素是一般的变量,是int 类型变量或者float 类型变量等等,那么就是一维数组,C语言里面只有一维数组