C 使用带有指向数组指针的memset

C 使用带有指向数组指针的memset,c,arrays,pointers,memset,C,Arrays,Pointers,Memset,如何使用指向数组的指针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]); int*A,n; printf(“\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]);
int*A,n;
printf(“\n输入数组的大小:”);
scanf(“%d”和“&n”);
A=(int*)malloc(sizeof(*A)*n);
int i=0;
memset(*A,5,n*sizeof(*A));
对于(i=0;i
编译器不会无缘无故发出警告:

警告:传递'memset'的参数1会使指针从整数变为不带强制转换的整数
应为“void*”,但参数的类型为“int”
这意味着在传递整数时,没有将正确的类型传递给
memset()
的第一个参数,该参数确实需要一个指针

您的指针
A
按原样很好,不需要取消引用(
*A
)并且是错误的,正确的调用是:

memset(A, 5, n * sizeof(*A));
更重要的是,这不是你想做的!如果您认为上面将分配数组的所有元素设置为
5
,则情况并非如此。相反,
memset()
将每个字节设置为
5
(请参阅)。由于
int
大于一个字节(通常为4),这将使用值
0x0505055
(十进制
84215045
)而不是
5
填充数组

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

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

memset()
的第一个参数必须是指针<代码>*A是一个
int
A
是一个指针。您应该从该代码中得到警告。如果没有,请打开编译器的警告级别。只需将第一个参数更改为
A
。顺便说一句:您将所有字节设置为5,而不是整数。4字节的整数将具有十六进制值0x0505005,即十进制的84215055。因此,即使删除间接寻址,它也不会将所有元素设置为5。非常感谢您的帮助@Marco Bonelli。这对我理解自己在做什么帮助很大。
A = malloc(sizeof(*A) * n);