问题
我有一个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/