[英]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()
的第一个参数,它确实需要一个指针,而您正在传递一个integer 。
您的指针A
原样很好,不需要取消引用它( *A
)并且是错误的,正确的调用是:
memset(A, 5, n * sizeof(*A));
更重要的是,这不是您想要做的! 如果您认为以上将分配的数组的所有元素设置为5
,则情况并非如此。 相反, memset()
将每个字节设置为5
(请参阅手册页)。 由于int
超过 1 个字节(通常为 4 个),这将使用值0x05050505
(十进制84215045
)而不是5
填充您的数组。
为了将每个元素设置为5
您需要一个for
循环:
int i = 0;
for (i = 0; i < n; i++)
A[i] = 5;
最后, 不要malloc()
的返回值:
A = malloc(sizeof(*A) * n);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.