/*
* 数组初始化练习
* */
#include <stdio.h>
int main()
{
//int arr[3] = {1, 2, 3};
//int arr[3] = {1, 2, 3, 4, 5};//这种情况下,编译器编译会给出警告,同时编译器丢掉多余元素
//int arr[] = {1, 2, 3, 4, 5};//这种情况下,编译器自动计算数组元素个数然后成倍申请内存空间,然后给出初始值。
int arr[3] = {1};//编译器在这种情况下,会自动将其他未指明初始值的元素初始化为零
int loop = 0;
for (loop = 0; loop < 3; loop++)
printf("%d\t", arr[loop]);
putchar('\n');
return 0;
}
/*
* 二维数组练习
*
* 注意:多维数组从右到左依次是低维-高维
* */
#include <stdio.h>
int main()
{
//int arr[3][4] ={{11, 12, 13, 14}, {21, 22, 23, 24}, {31, 32, 33, 34}};
//int arr[3][4] ={{11, 12 }, {21, 22, 23, 24}, {31, 32, 33, 34}};
//int arr[3][4] ={{11, 12 }};//部分初始化,那么,没有被明确给出初始化值的,编译器用零来自动补全其他未初始化元素
//int arr[][4] ={{11, 12 }, {21, 22, 23, 24}, {31, 32, 33, 34}};//不一定非要指明最高维度的数组长度,编译器可以根据初始化表来算出
int arr[3][4] ={11, 12, 31, 32, 33, 34};//这种情况的初始化表并没有指明某一维度数组初始化哪个数值,所以编译器读取初始化表,然后逐一赋值给arr[0][0],arr[0][1], arr[0][2],...,arr[1][0], arr[1][1],...
//int arr[3, 4]//错误,gcc编译器报错
//int arr[12/4][4]//正确,[]中可以出现表达式
int row = 0, col = 0;
for (row = 0; row < 3; row++) {
for (col = 0;col < 4; col++)
printf("%d ", arr[row][col]);
putchar('\n');
}
putchar('\n');
}
/*
* 变长数组
* 注意:传统上C语言(C89)是不支持变长数组功能的,也就是说数组长度是在编译期间就确定下来的,不能在运行期改变。变长数组的长度是在编译时无从得知的。
* */
#include <stdio.h>
int main()
{
int students;
unsigned i = 0;
printf("请输入学生人数:");
scanf("%d", &students);
float scores[students];
printf("students是%d\nsizeof(scores)是%d\n", students, sizeof(scores));
printf("请输入学生人数:");
scanf("%d", &students);
printf("students是%d\nsizeof(scores)是%d\n", students, sizeof(scores));
for (i = 0;i < students;i++)
scanf("%f", &scores[i]);
for (i = 0; i < students; i++)
printf("%f\t", scores[i]);
printf("students是%d\nsizeof(scores)是%d\n", students, sizeof(scores));
putchar('\n');
return 0;
}