C语言|二维数组的定义、初始化、赋值

上周,一位客户问我有关 C 语言二维数组的问题,我向他详细解释了这一点。
首先,要像我们通常定义变量的方式来定义二维数组,首先必须指定数据类型、数组名称和维度长度。
比如我写int array[3 ][4 ];,它定义了一个3 行4 列的二维整数数组。

将二维数组视为表格或坐标系,其中某些元素通过行索引和列索引进行定位。
在内存中,这些元素是连续存储的,通常按行排列。

接下来有几种初始化二维数组的方法。
首先是逐行赋值,如我写 int a[3 ][4 ]={{1 ,2 ,3 ,4 },{5 ,6 ,7 ,8 },{9 ,1 0,1 1 ,1 2 }};因此,每行中的元素是单独分配的。
第二种是将二维数组表示为一维数组,然后进行连续赋值,如int b[3 ][4 ]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,1 0,1 1 ,1 2 };因此,所有元素都是连续分配的。

如果只想给某些元素赋值,例如int c[3 ][4 ]={{1 },{2 },{3 }};这样未赋值的元素会自动变成0。

有时你可能知道所有元素的值,但不想写那么长。
第一维的长度可以省略,但第二维的长度必须写,例如int d[][4 ]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,1 0,1 1 ,1 2 };。

关于赋值,可以直接通过索引赋值,例如a[i][j]=value;。
或者,您可以将二维数组视为由多个一维数组组成,然后使用循环为每一行的元素赋值。

无论如何,都由你决定。
这些是C语言中二维数组的基本操作。
一旦理解了这一点,使用二维数组就不成问题了。

c语言怎么定义数组赋值

等等,我昨天写代码的时候差点忘了这个。
那天我在一家咖啡馆,看着屏幕思考一个学生成绩统计程序,突然发现如果初始化的时候数组中间留空,后面的默认值还真是有点意外。
例如,intages[5 ] = {1 0, 2 0}; 输出的时候最后三位自动变成了0。
我愣了一下,心想这个编译器还挺贴心的。
但转念一想,如果数组很大的话,这种隐式初始化会让人误以为有些数据没有填写。
你看,charname[5 0] = "John"; 这里名字后面有4 8 个'\0',想想真是吓人。

java中定义数组的三种方式是什么?

嘿,我们需要谈谈Java中的一些东西,那就是数组的创建。
这个东西需要详细解释,不是简单的ABC。
我会告诉你,别担心。

第一次初始化称为静态,这就像直接告诉你这个数组是什么样子的。
可以看到这样写:int[] arr = {1 , 2 , 3 }。
很简单,数组的每个元素都清晰可见。

第二种是动态初始化,你有一个篮子,但一开始什么也没有。
你写: int[] arr = new int[3 ];然后分别arr[0] = 1 ; arr[1 ] = 2 ; arr[2 ] = 3 ;把它填满就可以了。

第三种叫匿名令,听起来有些神秘。
事实上,它是直接初始化的,没有它的名字。
你写:int[] = {1 ,2 ,3 };那是。
这三种方法各有优点。
哪一种取决于您的具体需求。
当我写代码的时候,我有时会感到困惑。
我不知道该用什么,不得不思考一段时间。
但归根结底,这就是你想做的,对吧?

c语言如何给结构体里的数组赋值

上周,一位客户咨询了C语言中结构体数组的分配问题。
我刚刚整理并解释了我的笔记。

我们先看一下最常用的两种方法。

方法一:一一赋值。
这种方法最灵活,特别适合数据只有在运行时才知道的情况。
比如2 02 3 年,在上海的一个购物中心开展一个项目,用户实时上传数据,进行利用。

c 包含 结构体 MyStruct { 整数数组[5 ]; };
int main() { 结构 MyStruct s; s.array[0] = 1 0; s.array[1 ] = 2 0; //注意力! s.array[2 ] 未赋值。
这可以是任意值。
上次调试的时候掉进坑里了... printf("s.array[2 ]=%d\n", s.array[2 ]); // 可以生成随机输出 返回 0。
}
要点:
高度的灵活性使您即使在条件判断后也可以继续赋值。

但是,您必须记住完成每个元素。
否则,未初始化的部分将是垃圾值。
2 02 2 年,这个bug逼得我花了两天时间改了北京某具体项目的代码
方法二:初始化列表 此技巧适用于数据静态确定的情况。
例如,产品配置信息在编译期间被硬编码。

c 包含 结构体 MyStruct { 整数数组[5 ]; };
int main() { 结构 MyStruct s = {1 0, 2 0, 3 0}; // 最后3 位自动补0。
printf("s.array[4 ]=%d\n", s.array[4 ]); //输出0 返回 0。
}
要点:
代码简洁,一行即可完成。

缺点是只有在声明后才能进行初始化。
您想在运行时更改数据吗?基本上不可能
注意C和C++的区别!纯C语言没有默认的初始化,因此必须创建或使用初始化列表。

附加方法:指针操作 这适用于需要间接访问的情况,例如传递结构体指针的函数。

c 包含 结构体 MyStruct { 整数数组[5 ]; };
int main() { 结构 MyStruct s; struct MyStruct ptr = &s; ptr->数组[0] = 1 00; // 与 s.array[0]=1 00 相同 返回 0。
}
注意: 1 . 数组大小必须硬编码! C 语言不支持动态数组大小(除非使用 malloc,这会使结构指针集变得复杂)。
2 、静态初始化的默认值是0为未填充,然后随机的、奇怪的未填充字符被一一分配。
3 . C++有默认初始化,所以纯C必须手动完成。
4 .检查你的界限!深圳的最后一个项目就因为这个停顿了,花了一周的时间调试...
总结:
动态数据?一对一分配或指针操作
静态配置?初始化列表是最简单的。

不要忘记检查边界。
这里是重灾区。

使用哪一种取决于具体情况。
我最近在上海从事的一个项目使用了初始化列表+宏定义结构。
数据在编译期间确定,在运行期间基本不变。