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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

    

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

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

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

randomTeam是前面随机生成数
closureLNK closure_link里index成员是整型,这里我说错了

1.如果这个结构体没有指针成员的话,可以直接用“=”号赋值(目前主流的编译器都支持这样的赋值,如果是特别老旧的编译器可能不支持这样,那就要把每个成员分别赋值了 如果有指针成员,那么这个指针成员不能简单的赋值 参考技术A 可以的,数组复制等于号就是直接拷贝,但是你需要考虑的是,深复制还是浅复制问题。根据你的业务逻辑来处理。语法上是支持的。 参考技术B 二维数组 不可以直接赋值一维数组
而是要逐项赋值
或者用memcpy整体赋值。
你的这个代码 就是逐项赋值的
参考技术C 1.如果这个结构体没有指针成员的话,可以直接用“=”号赋值(目前主流的编译器都支持这样的赋值,如果是特别老旧的编译器可能不支持这样,那就要把每个成员分别赋值了 如果有指针成员,那么这个指针成员不能简单的赋值 参考技术D 如果对内存熟悉的话可以直接拷贝内存
memcpy来进行数组复制。追问

这样写合乎语法吗?

以上是关于c语言二维数组如何初始化的主要内容,如果未能解决你的问题,请参考以下文章

C语言 如何定义一个二维指针数组?

C语言如何给用函数二维数组动态赋值

c语言有关二维数组变量初始化

C语言如何定义一个N行N列的二维数组任意输入数据

C语言 指针初始化二维数组

C语言 指针二维数组怎么初始化