将 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);
如何使用指向该数组的指针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);