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);