我的指针数组动态分配,长度为10.
现在我想用所有" 1"初始化这个数组。
但是如果我打印出阵列[2]它会显示0。 如果我打印出数组[1],它会显示一个像4905904374893479这样的高数字。 为什么这个数组没有设置为" 1"在所有位置?
我没有太多经验,但我没有找到解决方案。
uint64_t *array= malloc((10) * sizeof(uint64_t));
memset(array,1, sizeof(*array));
printf("array[2]: %llu \n", primes[2]);
答案 0 :(得分:4)
*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;
答案 1 :(得分:3)
public string FirstName
使用memset
填充它,因此您在每个64位条目中获得的内容为char
。
而BTW,0x0101010101010101
只给出了数组中单个条目的大小。
您也可以使用简单的sizeof(*array)
循环:
for