Использование memset с указателем на массив - PullRequest
0 голосов
/ 20 марта 2020

Как мне 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]);

1 Ответ

1 голос
/ 20 марта 2020

Компилятор не выдает предупреждения без причины:

warning: passing argument 1 of 'memset' makes pointer from integer without a cast
expected 'void *' but argument is of type 'int'

Это означает, что вы не передаете правильный тип первому аргументу memset(), что действительно хочет указатель , в то время как вы передаете целое число .

Ваш указатель A в порядке, разыменование (*A) не требуется и неправильно, правильный вызов:

memset(A, 5, n * sizeof(*A));

Что еще более важно, это не то, что вы хотите сделать! Если вы думаете, что выше устанавливает все элементы выделенного массива на 5, это не так. Вместо этого memset() устанавливает каждый байт на 5 (см. справочную страницу ). Так как int больше одного байта (обычно 4), это заполнит ваш массив значением 0x05050505 (десятичное 84215045) вместо 5.

, чтобы установить каждый элемент на 5 вам понадобится for l oop:

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

Наконец, не приведите возвращаемое значение malloc():

A = malloc(sizeof(*A) * n);
...