размер массива в динамическом c проблема размещения - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно решить эту проблему: «Напишите программу, которая читает с клавиатуры последовательность из 10 целых чисел и записывает ту же последовательность в обратном порядке, деля на 2 четных элемента последовательности».

Я хочу знать размер массива p, чтобы напечатать его в обратном порядке, но когда я пытаюсь получить размер массива с помощью «l = sizeof (p) / sizeof (p [0])» для l oop ниже не работает.

int main(){
    int n,i;
    int *p;
    int l;

    printf("How long the array? ");
    scanf("%d",&n);

    p = malloc(n*sizeof(int));

    if(p != NULL){
        for(i=0;i<n;i++){
            printf("Insert number in index (%d) of array: ",i);
            scanf("%d",p+i);
        }

        l = sizeof(p)/sizeof(p[0]);

        for (i=n;i == 0;i--){
            if(p[i] % 2 == 0){
                printf("%d ",p[i]/2);
            }
            else{
                printf("%d",p[i]);
            }
        }
    }
    else{
        printf("ERROR!!");
    }

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Возвращаемое значение sizeof будет размером в байтах - не массива, а указателя, который в данном случае является целым числом. То, что вы хотите, это длина. Ваша длина хранится в n.

Ваш for-l oop немного сбивает с толку. Попробуйте использовать n - 1 (длина массива), чтобы запустить l oop, получив доступ к последнему значению индекса массива. Кроме того, printf внутри блока else не правильно размещает вывод. Попробуйте следующий код:

for (i = n - 1; i >= 0; --i)
{
    if (p[i] % 2 == 0)
    {
        printf("%d ", p[i] / 2);
    }
    else
    {
        printf("%d ", p[i]);
    }
}
0 голосов
/ 10 апреля 2020

, когда я пытаюсь получить размер массива с l = sizeof(p)/sizeof(p[0]), для l oop ниже не работает.

Это не удается, так как p является указателем, не массив. Размер p равен 4 или 8.

Я хочу знать размер массива p

p не является массивом. Просто используйте n, как в распределении.

...