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 初始化 ;今天刚接触,很强大,但要提前书写数组大小,不能通过后续输入。