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)