我动态分配了长度为 10 的指针数组。
现在我想用全“1”来初始化这个数组。
但是如果我打印出数组[2],它会显示 0。 如果我打印出 array[1],它会显示一个很大的数字,例如 4905904374893479。 为什么这个数组没有在所有位置都设置为“1”?
我对此没有太多经验,但我没有找到解决方案。
uint64_t *array= malloc((10) * sizeof(uint64_t));
memset(array,1, sizeof(*array));
printf("array[2]: %llu \n", primes[2]);
最佳答案
*array
是一个单个 uint64_t
,而不是整个数组。这意味着您的 memset
没有设置整个数组,而只是设置它的第一个元素。
并且,在决定使用 sizeof(array)
之前,请注意它会衰减到指向该数组的指针,因此也不会是正确的大小。
memset
函数适用于字节而不是更广泛的数据类型,因此,除非您希望将每个字节设置为相同的值,否则 memset
不是适合该工作的工具。将它们设置为 0
时它会起作用,因为它是由全零模式表示的。
您最好的选择是使用以下内容显式初始化每个:
uint64_t *array= malloc(10 * sizeof(uint64_t));
// should really check for malloc failure.
for (size_t idx = 0; idx < 10; idx++)
array[idx] = 1;
关于c memset指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317610/