c语言二维数组如何初始化

书上的一个题,为什么 char hao[][5]={{' ',' ','*'}, {' ','*',' ','*'}, {'*',' ',' ',' ','*'}, {' ','*',' ','*'}, {' ',' ','*'} };是正确的

char hao[5][5]; hao[][5]={{' ',' ','*'}, {' ','*',' ','*'}, {'*',' ',' ',' ','*'}, {' ','*',' ','*'}, {' ',' ','*'} };是错误的。

顺便问一下,二维数组如何对一行数据进行初始化,即每次初始化一行.....谢了

1 有两种方法

    (1)在定义时可以直接赋值来初始化

    (2)在定义后可以为其元素一个个来赋值

2 示例

#include<stdio.h>
void display(int arr[2][3], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
printf("%d ", arr[i][j]);
}
puts("");
}
puts("");
}
int main(){
//方法(1)
int arr1[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };

//方法(2)
int arr2[2][3];
int num = 1;
for (int i = 0; i < 2; i++){
for (int j = 0; j < 3; j++){
arr2[i][j] = num++;
}
}

display(arr1, 2, 3);
display(arr2, 2, 3);

getchar();
return 0;
}

3 运行结果

    由结果可知,两种方式达到的效果是一样的

4 扩展

    由于C语言中数组中的元素的地址是连续的,所以下面的写法也是可以的,运行效果同上

#include<stdio.h>
void display(int arr[2][3], int row, int col){
for (int i = 0; i < row*col; i++){
for (int j = 0; j < col; j++){
printf("%d ", arr[i][j]);
}
puts("");
}
puts("");
}
int main(){
//方法(1)
int arr1[2][3] = { 1, 2, 3, 4, 5, 6 };

//方法(2)
int arr2[2][3];
int num = 1;
int *p = *arr2;//指向数组的第一个元素
for (int i = 0; i < 2 * 3; i++){
*p++ = num++;
}

display(arr1, 2, 3);
display(arr2, 2, 3);

getchar();
return 0;
}

    

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-25
二维数组可以在定义的时候初始化,就像上面那样。
如果已经定义了一个二维数组,就不能批量初始化,必须对二维数组每个元素hao[i][j]单独进行初始化。C语言里面不能对一行数据进行初始化的。
对于一个二维数组,你可以用两层for循环,对每个元素初始化。本回答被提问者采纳
第2个回答  2014-01-17
第一个是初始化,由编译器赋值,可以一次多个同时初始化。
下一个是赋值语句,由程序本身赋值,不允许一次赋值多个元素。
要对一行数据赋值,必须用循环语句,一个一个来。
对一行数据初始化,可以用上述方法,根据数据量的多少尽可能初始化前面的行,剩余的部分
可能填0,可能是未知数,这取决于编译器。
第3个回答  2015-09-18
二维数组只能在定义的时候初始化,初始化方式如下:
char hao[][5]={
{' ',' ','*'},
{' ','*',' ','*'},
{'*',' ',' ',' ','*'},
{' ','*',' ','*'},
{' ',' ','*'} }; //第一维度没有给出,按初始化的行数,确定数组第一维度。

初始化定义:在定义变量时,同时完成对变量的初始赋值,称为变量初始化。
在定义变量以后(未初始化),再对变量值的改变操作叫赋值!所以,初始化,只能在变量定义时进行。
char hao[][5] ; //这样写是错误的,因为,这里没有初始化,第一维是空的,系统不知道如何分配变量空间!
hao[][5]={{...}} ; //这样写更是错误,此时,hao[][5]这种写法为数组元素的引用,括号中必须要有合理的下标值,不能是空,不能超过数组行列数。
第4个回答  2014-01-17
烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
相似回答