繁体   English   中英

使用带有指向数组的指针的 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()的第一个参数,它确实需要一个指针,而您正在传递一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM