使用 memset 初始化指针元素的二维数组

Posted

技术标签:

【中文标题】使用 memset 初始化指针元素的二维数组【英文标题】:initialize two dimensional array of pointer elements using memset 【发布时间】:2008-12-29 04:57:56 【问题描述】:

我有这些结构定义

typedef struct my_s 
   int x;
   int y;
 my_T;

typedef struct your_s 
    my_T * x;
 your_T;

your_T array[MAX_COL][MAX_ROW];

要将数组的指针初始化为NULL,我可以这样做吗:

memset (array, 0, sizeof(array))

这对我来说不合适。

【问题讨论】:

不应该是“your_T array[MAX_ROW][MAX_COL];”因为 C++ 中的数组是行优先顺序的? 【参考方案1】:

最简单的是

your_T array[MAX_COL][MAX_ROW] = 0;

【讨论】:

+1,澄清一下,这是因为所有未显式初始化的成员都将设置为 0,即空指针。 hmn,尝试这个,编译器给出警告:在数组[0][0] 附近的初始化器周围缺少大括号,我的警告被视为错误。 抱歉,忘记了第三套牙套。结构数组的数组。【参考方案2】:
typedef struct my_s 
   int x;
   int y;
 my_T;

typedef struct your_s 
    my_T * x;
 your_T;

your_T array[MAX_COL][MAX_ROW];

您不能使用 memset 将 your_T 的指针初始化为空,因为没有指定空指针的位模式全部由空位组成。但是你可以像这样创建你的数组:

your_T array[MAX_COL][MAX_ROW] = ;

元素将被默认初始化,这意味着对于指针,该指针将包含一个空指针值。如果你的数组是全局的,你甚至不必关心。这将在默认情况下发生。

【讨论】:

感谢您的信息。我知道当全局时,它默认为 NULL,但我想确保它是 NULL-ed,因为我在嵌入式空间中运行...... 那么您可以使用 。缩进是一个实现可以在指针中存储一个不同于 0x0 的值,当通过对该存储单元的后续读取取消引用时,可能会导致生成陷阱。因此,0x0 位模式不需要空指针中的内容。 +1。空括号初始化在 C 中是非法的,但正如我刚刚了解到的,在 C++ 中是合法的,这是一个常见/有用的构造吗? 我相信空指针被定义为 0 (C++03,4.10): ' 空指针常量是整数类型的整数常量表达式 (5.19) 右值,它计算到零。'这当然不是说指针会为零,而是赋值为0会使指针为空 是的,空指针常量是产生零(所有位为零)的每个整数常量表达式。例如 ('a'-'a') 或简单的 0。将其转换为指针将产生一个空指针值,这不再是所有位为零了。

以上是关于使用 memset 初始化指针元素的二维数组的主要内容,如果未能解决你的问题,请参考以下文章

c语言中怎样实现对二维数组元素进行赋值并输出。

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

C语言如何定义指针指向字符型二维数组

怎样求一个二维数组元素之和以及二维数组元素的最小值及下标

C 语言二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

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