将 memset 与指向数组的指针一起使用

Using memset with pointer to an array

如何使用指向该数组的指针memset一个数组?

int *A, n;

printf("\n Enter the size of array : ");
scanf("%d",&n);

A = (int*) malloc(sizeof(*A) * n);

int i = 0;

memset(*A,5,n * sizeof(*A));

for(i = 0; i < n; i++)
    printf("%d ", A[i]);

编译器无缘无故不发出警告:

warning: passing argument 1 of 'memset' makes pointer from integer without a cast
expected 'void *' but argument is of type 'int'

这意味着您没有将正确的类型传递给 memset() 的第一个参数,它确实需要一个 指针 ,而您传递的是 [=42] =]整数.

您的指针 A 没有问题,取消引用它 (*A) 不需要并且是错误的,正确的调用是:

memset(A, 5, n * sizeof(*A));

但更重要的是,这不是你想要做的!如果您认为上面将分配数组的所有元素设置为 5 ,那不是这种情况。相反,memset() 每个字节 设置为 5(参见 manual page)。由于 int 超过一个字节(通常为 4 个字节),这将用值 0x05050505(十进制 84215045)而不是 5.[=30= 填充数组]

为了将每个元素设置为 5,您需要一个 for 循环:

int i = 0; 
for (i = 0; i < n; i++)
    A[i] = 5;

最后,don't cast the return value of malloc()

A = malloc(sizeof(*A) * n);