C语言--数组初始化

本文详细介绍了C语言中数组的初始化方式,包括不完全初始化、完全初始化、按行初始化、使用for循环、#define常量定义数组、指针操作以及memset函数的用法,强调了for循环的通用性和#define初始化的高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言--数组初始化

一、一般操作

不完全初始化

int arr1[3][5] = {2,9};
int arr2[3][5] = {0};

完全初始化

int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

按照⾏初始化

int arr4[3][5] = {{11,22},{33,44},{55,66}};

省略⾏,不能省略列

int arr5[][5] = {1,2,3};
int arr6[][5] = {9,8,7,6,5};
int arr7[][5] = {{11,22},{33,44},{55,66}};

二、for 循环

#include <stdio.h>
int main() {
	int i,j,n;
	int arr[n];
	scanf("%d",&n); //自定义输入n个元素 
	//输入 
	for(i = 0; i < n; i++) {
		scanf("%d",&arr[i]);
	}
	//输出 
	for(i = 0; i < n; i++) {
		printf("%d ",arr[i]);
	}
	return 0;
}

运行如下(示例):

5
9 8 7 6 5
9 8 7 6 5

三、#define 初始化

一维数组代码

#include<stdio.h>
#define NUM 20 //元素数量可自定义

int main() {
	int a[NUM]= {[0 ...(NUM - 1)] = 0}; //可以初始为任意整数,如:1,2,3...

	int i =0;
	for(; i<20; i++) {
		printf("%d ",a[i]);
	}
	return 0;
}

运行如下(示例):

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

二维数组代码

#include<stdio.h>
#define ARR_LEN 6
int main() {
	int arr4[ARR_LEN][ARR_LEN] = { [0 ... (ARR_LEN-1)][0 ... (ARR_LEN-1)] = 6 }; /* 6*6个元素都初始化为6 */

	int i,j;
	//输出
	for(i = 0 ; i < 6 ; i++) {
		for(j = 0 ; j < 6 ; j++) {
			printf("%d ",arr4[i][j]);
		}
		printf("\n");
	}
	return 0;
}

运行如下(示例):

6 6 6 6 6 6
6 6 6 6 6 6
6 6 6 6 6 6
6 6 6 6 6 6
6 6 6 6 6 6
6 6 6 6 6 6

四、指针

//指针
#include<stdio.h>
int main() {
	int arr[9];
	int* p = arr;  // 指向数组首元素的指针
	int i;
	for (i = 0; i < 9; i++) {
		*p = 999;
		p++;
	}
	for (i = 0; i < 9; i++) {
		printf("%d ",arr[i]);
	}
	return 0;
}

运行如下(示例):

999 999 999 999 999 999 999 999 999

五、memset函数

//memset函数(全部初始化为0)
#include<stdio.h>
#include<string.h>
int main()
{
	int a[10][10];
	memset(a,0,sizeof(a));
	int i,j; 
	for(i = 0;i < 10;i++)
	{
		for(j = 0;j < 10;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}	
	return 0;
}

运行如下(示例):

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
//memset函数(全部初始化为-1)
#include<stdio.h>
#include<string.h>
int main()
{
	int a[10][10];
	memset(a,-1,sizeof(a));
	int i,j; 
	for(i = 0;i < 10;i++)
	{
		for(j = 0;j < 10;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}	
	return 0;
}

运行如下(示例):

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
//	memset适用于字符初始化
#include<stdio.h>
#include<string.h>
int main() {
	int i=0;
	char a[10];
	memset(a,'k',sizeof(a));//初始化

	for(i=0; i<10; i++)
		printf("%c ",a[i]);
	printf("\n");
	return 0;
}

运行如下(示例):

k k k k k k k k k k

总结

一般情况下,推荐用for循环,可自由在各个编译器中正确运行;最快速的方法是用#define 初始化 ;今天刚接触,很强大,但要提前书写数组大小,不能通过后续输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值