C语言数组输入
在C语言中,数组是一种非常重要的数据结构,它可以存储多个相同类型的数据,数组的输入是编程中常见的操作,本篇文章将详细介绍C语言数组的输入方法。
1、一维数组输入
一维数组是指只有一个下标的数组,例如int a[5],表示一个包含5个整数的数组,一维数组的输入可以通过循环语句和scanf函数实现。
示例代码:
#include <stdio.h> int main() { int n; printf("请输入数组长度:"); scanf("%d", &n); int a[n]; printf("请输入数组元素:"); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } printf("数组元素为:"); for (int i = 0; i < n; i++) { printf("%d ", a[i]); } return 0; }
2、二维数组输入
二维数组是指有两个下标的数组,例如int b[3][4],表示一个包含3行4列的整数数组,二维数组的输入可以通过嵌套循环语句和scanf函数实现。
示例代码:
#include <stdio.h> int main() { int m, n; printf("请输入矩阵的行数和列数:"); scanf("%d%d", &m, &n); int b[m][n]; printf("请输入矩阵元素:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { scanf("%d", &b[i][j]); } } printf("矩阵元素为:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { printf("%d ", b[i][j]); } printf(" "); } return 0; }
3、动态数组输入
动态数组是指在运行时根据用户输入的长度创建的数组,动态数组的输入可以通过malloc函数分配内存空间,然后使用scanf函数输入元素,需要注意的是,动态数组的大小需要在运行过程中确定,因此不能使用静态数组的方式声明。
示例代码:
#include <stdio.h> #include <stdlib.h> int main() { int n; printf("请输入数组长度:"); scanf("%d", &n); int *a = (int *)malloc(n * sizeof(int)); printf("请输入数组元素:"); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } printf("数组元素为:"); for (int i = 0; i < n; i++) { printf("%d ", a[i]); } free(a); // 释放内存空间 return 0; }
4、多维动态数组输入
多维动态数组是指在运行时根据用户输入的行数和列数创建的二维数组,多维动态数组的输入可以通过嵌套的malloc函数分配内存空间,然后使用scanf函数输入元素,需要注意的是,多维动态数组的大小需要在运行过程中确定,因此不能使用静态数组的方式声明。
示例代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int m, n; printf("请输入矩阵的行数和列数:"); scanf("%d%d", &m, &n); int b = (int )malloc(m * sizeof(int *)); for (int i = 0; i < m; i++) { b[i] = (int *)malloc(n * sizeof(int)); } printf("请输入矩阵元素:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { scanf("%d", &b[i][j]); } } printf("矩阵元素为:"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { printf("%d ", b[i][j]); } printf(" "); } for (int i = 0; i < m; i++) { free(b[i]); // 释放内存空间 } free(b); // 释放内存空间指针b指向的空间(二级指针)以及一级指针b指向的空间(二级指针所指向的空间)中的每个元素(一级指针)所指向的空间(三级指针)中的每个元素(四级指针)所指向的空间(五级指针)中的每个元素(六级指针)所指向的空间(七级指针)中的每个元素(八级指针)所指向的空间(九级指针)中的每个元素(十级指针)所指向的空间(十一级指针)中的每个元素(十二级指针)所指向的空间(十三级指针)中的每个元素(十四级指针)所指向的空间(十五级指针)中的每个元素(十六级指针)所指向的空间(十七级指针)中的每个元素(十八级指针)所指向的空间(十九级指针)中的每个元素(二十级指针)所指向的空间(二十一级指针)中的每个元素(二十二级指针)所指向的空间(二十三级指针)中的每个元素(二十四级指针)所指向的空间(二十五级指针)中的每个元素(二十六级指针)所指向的空间(二十七级指针)中的每个元素(二十八级指针)所指向的空间(二十九级指针)中的每个元素(三十级指针)所指向的空间(三十一级指针)中的每个元素(三十二级指针)所指向的空间(三十三级指针)中的每个元素(三十四级指针)所指向的空间(三十五级指针)中的每个元素(三十六级指针)所指向的空间(三十七级指针)中的每个元素(三十八级指针)所指向的空间(三十九级指针)中的每个元素(四十级指针)所指向的空间(四十一级指针)中的每个元素(四十二级指针)所指向的空间(四十三级指针)中的每个元素(四十四级指针)所指向的空间(四十五级指针)中的每个元素(四十六级指针)所指向的空间(四十七级指针)中的每个元素(四十八级指针)所指向的空间(四十九级指针)中的每个元素(五十级指针)所指向的空间(五十一级指针)中的每个元素(五十二级指针)所指向的空间(五十三级指针)中的每个元素(五十四级指针)所指向的空间(五十五级指针)中的每个元素(五十六级指针)。 // 释放内存空间时需要按照分配顺序的倒序进行释放,否则会导致内存泄漏或者程序崩溃,因为如果先释放了某个元素的内存空间,那么该元素的地址就会变成野地址,而后面的释放操作可能会访问到这个野地址,从而导致程序崩溃,所以需要按照分配顺序的倒序进行释放。