Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何检查数组中的元素是否为地址? 问题_C - Fatal编程技术网

C 如何检查数组中的元素是否为地址? 问题

C 如何检查数组中的元素是否为地址? 问题,c,C,我使用malloc初始化了一个数组。当该数组初始化时,如果我打印出该数组的一个元素,而不替换任何值,那么它会为我返回值-84215051——我假设它不会总是返回相同的值(我相信这是转换为整数的地址) 我希望能够检查数组的索引是否是地址。如果是这样,我希望能够用整数替换该值,或者将其相乘 例如: 这可能吗?不,无法判断数组元素是否已初始化 您可以使用calloc()而不是malloc(),这会自动将所有内容初始化为0,因此您可以执行以下操作: if (array[0] == 0) { ar

我使用
malloc
初始化了一个
数组。当该数组初始化时,如果我打印出该
数组的一个元素,而不替换任何值,那么它会为我返回值
-84215051
——我假设它不会总是返回相同的值(我相信这是转换为整数的地址)

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

例如:
这可能吗?

不,无法判断数组元素是否已初始化

您可以使用
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;
}
我使用malloc初始化了一个数组

不,你没有
malloc()
不会初始化它返回地址的内存

我希望能够用整数替换该值,或者将其相乘。[...] 这可能吗

否,因为您可能无法读取未初始化的内存,因为表达式

(array[0] == address) 

是的。如果代码未定义,则会引发未定义的行为。

否,则不可能。一点也不。malloc不会初始化分配的内存。你通过访问内存得到的只是垃圾。您看到的
-84215051
是一些随机值。你说的地址是什么意思?不,不可能。垃圾可以是任何东西,包括有效值。是什么让你认为它在返回地址?它只是在分配给数组元素之前返回数组元素中的任何整数。
数组的数据类型是什么?
if (!array[0].initialized) {
    array[0].value = 5;
    array[0].initialized = 1;
} else {
    array[0].value *= 3;
}
(array[0] == address)