c - 如何判断多维数组是否未分配给?

标签 c multidimensional-array initialization

如果我有两个像这样的数组:

short** x;
short** y = functionThatReturnsAnArray();

在这种情况下 sizeof(x) == sizeof(y)。 两者都是 4,我认为这是因为外部数组只是一个指针数组,因此实际上没有分配任何 RAM。

我怎么知道 x 没有被赋值?

谢谢,

最佳答案

从您原始帖子中的评论来看,您的意思是您是否可以判断是否已将值分配给变量。我们称之为初始化。当一个值还没有被存储到一个变量时,它是未初始化的,这很糟糕,因为你永远不知道那里可能有什么,不,你无法检查它是否已经被初始化,所以初始化它当你声明它时。


sizeof(x) == sizeof(y) 因为它们被声明为同一类型 (short**);它们的内容无关紧要(sizeof 实际上是由编译器决定的,所以它通常不知道里面有什么)。

如果你想知道每个指向的内存区域是否为零,你需要手动完成(并且你需要知道每个数组有多长):

int x_empty = 1;

for(int i = 0; i < x_length_d1 && x_empty; i++) {
    if(x[i] == NULL) {
        // Handle a missing row however you want.
    }
    for(int j = 0; j < x_length_d2 && x_empty; j++) {
        if(x[i][j] != 0) x_empty = 0;
    }
}

关于c - 如何判断多维数组是否未分配给?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248714/

相关文章:

带有图标名称的 Java 2d 数组

java - 使用重复策略查找二维数组中的邻居

c++ - 非局部非内联变量的初始化 : does it take place strictly before the `main()` function call?

c - 使用位运算

c - 基本字符串到 float 转换

c - 为什么要重新加载 C 中的静态局部变量?

c++ - 为什么单独初始化一个新变量是有效的?

c - 在 C 中通过 TCP 发送和接收整数值

c - 带二维数组的指针

c - 初始化数组时 VS2010 中的“初始化”错误