неожиданный вывод для элемента обратного массива с использованием указателя - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу перевернуть элемент массива, используя указатель. Но почему я получаю вывод как 4 3 3 4, когда я даю ввод 1 2 3 4

здесь мой код

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    int n, a[100], *ptr;
    printf("enter array size: ");   
    scanf("%d",&n);
    printf("enter array element: ");
    for(int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }

    ptr = &a[0];
    int j=0;
    int i = n-1;

    while(j != n)
    {   
        a[j] = *(ptr+i);
        j++;
        i--;
    }

    // for printing output

    printf("\nin reverse: \n");
    for(int k=0; k<n; k++)
    {
        printf("%d, ",a[k]);
    }

    return 0;
}

Кто-нибудь может сказать мне, в чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

В вашем коде вы перезаписываете значения ..

Чтобы поменять местами цифры с помощью указателей, замените while-loop, как показано ниже в вашем коде.

int* ptr_start = a;
int* ptr_end = a + (sizeof(a) / sizeof(a[0])) - 1;
 while (ptr_start < ptr_end) {
        *ptr_end   ^= *ptr_start;
        *ptr_start ^= *ptr_end ;
        *ptr_end   ^= *ptr_start;
        ptr_start++;
        ptr_end--;
      }

Примечание: Это отрицательно скажется на производительности.

0 голосов
/ 05 декабря 2018
while(j != n)
{   
    a[j] = *(ptr+i);
    j++;
    i--;
}

На самом деле эти два значения не меняются местами.Это простая настройка первой половины.Чтобы поменять их местами, вы должны добавить строку вроде:

while(j != n / 2)
{   
    int temp = a[j];
    a[j] = *(ptr+i);
    *(ptr + i) = temp;
    j++;
    i--;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...