c - 如何检查数组中的元素是否为地址?

标签 c

问题

我有一个array使用 malloc 初始化。当该数组初始化时,如果我打印出该 array 的一个元素不替换任何值,则返回值 -842150451对我来说 - 我认为它不会总是返回相同的值(我相信这是转换为整数的地址)。

我希望能够检查数组的索引是否是地址。如果是这样,我希望能够用整数替换该值,或将其相乘。

例如:

if(array[0] == address) Then
array[0] = 5; //Replaces the value of the address with a random integer.

else
array[0] *= 3; // Otherwise, if the element at index 0 is not an address, then multiply the number by an arbitrary integer.

这可以做到吗?

最佳答案

不,没有办法判断数组元素是否已初始化。

您可以使用 calloc() 而不是 malloc(),这会自动将所有内容初始化为 0,因此您可以执行以下操作:

if (array[0] == 0) {
    array[0] = 5;
} else {
    array[0] *= 3;
}

但是如果 0 是数组中的有效值,则此方法将不起作用。

您可以使用结构数组代替整数数组,并在结构中放置一个initialized字段。

struct element {
    int initialized;
    int value;
};

分配数组后,您需要填写所有元素中的initialized字段,以表明这些值尚未初始化。

array = malloc(N * sizeof(struct element));
for (int i = 0; i < N; i++) {
    array[i].initialized = 0;
}

然后你可以这样做:

if (!array[0].initialized) {
    array[0].value = 5;
    array[0].initialized = 1;
} else {
    array[0].value *= 3;
}

关于c - 如何检查数组中的元素是否为地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781368/

相关文章:

c - 平方求幂的时间复杂度是多少?

c - 结构没有命名的成员

c - 扫描字符然后在 IF 语句中使用它们? (如果 char= ='c' ){} 等

关于系统托盘最小化 - WIN API 的几个问题

c - 从标准输入读取整数

c - 将 linenoise 库添加到 nixpkgs

python - 从c中的嵌入式python代码加载DLL

c - 函数指针上的 __attribute__

c - 这些 Pointer 语句有何不同 *p = &i , h = &j?

c - 单元测试实际过程