【经验分享】C语言二维数组

Explorer 发布于 2024-12-13 511 次阅读


AI 摘要

本文详细讲解了C语言二维数组的创建、初始化和使用方法,包括使用大括号进行完全或不完全初始化,以及通过嵌套循环进行输入输出。文章还提供了一个字符串从两端向中间汇聚的实操练习,并简要介绍了C99标准中的变长数组特性。

一、二维数组的创建

1.二维数组的创建

type arr_name[常量1][常量2];

例如:
int arr[3][5];
double data[2][8];
char ch[][];

//3表示数组有三行,5代表数组每一行有5个元素。int代表数组中的元素为整数。

2.二维数组的初始化

像一维数组【1】一样,同样使用大括号初始化

//不完全初始化,剩余元素默认为0;
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};

//按照行初始化,第2,3,4列都为0;
int arr3[3][5] = {{1,2},{3,4},{5,6}}

//完全初始化
int arr4[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

//初始化时候可以省略行,但是不能省略列
int arr4[][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

二、二维数组的使用

3.二维数组的输入与输出

C语言【2】规定数组的索引要从0开始,包括行与列

#include<stdio.h>
int main(){
 int arr[3][5] = {0};
 int i = 0;
 for(i = 0; i < 3; i++) {
 int j = 0;
 for (j = 0; i < 5; j++) {
 scanf("%d",&a[i][j]);
}
}
 for(i = 0; i < 3; i++) {
 int j = 0;
 for (j = 0; i < 5; j++) {
 printf("%d",a[i][j]);
}
 printf("\n");
}
return 0;
}

三、实操练习

字符从两端移动,到中间汇聚

前提:

strlen【3】求的是字符串的长度,统计的是字符串中/0之前的长度。

sizeof【4】是数组所占内存空间的大小(单位是字节),包括/0。

#include<stdio.h>
#include<string.h>

int main() {
char arr1[] = "welcome to China!!!";
char arr2[] = "###################";
int left = 0;
int right = strlen(arr1) - 1;

while(left <= right) {
 arr2[left] = arr1[left];
 arr2[right] = arr1[right];
left++;
right--;
printf("%s\n", arr2);
}
return 0;
}

输出以下

w#################!
we###############!!
wel#############!!!
welc###########a!!!
welco#########na!!!
welcom#######ina!!!
welcome#####hina!!!
welcome ###China!!!
welcome t# China!!!
welcome to China!!!

关于C99中的变长数组

在C99【5】标准中,变长数组【6】(Variable Length Arrays, VLA【7】)是一种允许数组的大小在运行时动态确定的特性。与传统的静态数组不同,变长数组的大小不是在编译时确定,而是在程序运行时动态指定

#include <stdio.h>

void example(int n) {
    int array[n];  // n是一个运行时确定的值
    for (int i = 0; i < n; i++) {
        array[i] = i + 1;
    }
    for (int i = 0; i < n; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
}

int main() {
    int size;
    printf("Enter the size of the array: ");
    scanf("%d", &size);
    example(size);
    return 0;
}

输入5输出1 2 3 4 5;