Вывести значение указателя массива в обратном порядке - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу напечатать значение массива указателей в обратном порядке

#include <stdio.h>
#define size 5
int main()
{
  int a[size] = {1,2,3,4,5};
  int i;
  int *pa = a;
  for(i = size; i >0; i--)
  {
    printf("a[%d] = %d\n",i,*pa);
    pa++;
  }
  return 0;
}

Вывод:

a[5] = 1    
a[4] = 2
a[3] = 3    
a[2] = 4    
a[1] = 5

Вывод, который мне нужен:

a[5] = 5    
a[4] = 4    
a[3] = 3    
a[2] = 2    
a[1] = 1

Ответы [ 3 ]

0 голосов
/ 28 февраля 2019

Ты делаешь это слишком сложно.Имея указатель на массив, вы можете использовать оператор индексации для него так же, как и для самого массива:

    int a[size] = {1,2,3,4,5};
    int i;
    int *pa = a;
    for (i = size - 1; i >= 0; i--) {
        printf("a[%d] = %d\n", i, pa[i]);
    }

В качестве альтернативы, если вы хотите по какой-то причине избежать оператора индексации, просто запуститеваш указатель на один конец ...

    *pa = a + size;

... и декремент это при прохождении цикла:

    for (i = size - 1; i >= 0; i--) {
        pa--;
        printf("a[%d] = %d\n", i, *pa);
    }

Заметьте,Между прочим, индексирование массива в C начинается с 0, так как приведенные выше примеры кода правильно учитывают.

0 голосов
/ 28 февраля 2019

Вам не нужно использовать указатель.Более простая реализация

#include <stdio.h>
#define size 5
int main()
{
  int a[size] = {1,2,3,4,5};
  for(int i = size-1; i >=0; i--)
    printf("a[%d] = %d\n",i,a[i]);
  return 0;
}
0 голосов
/ 28 февраля 2019

заменить этим

#include <stdio.h>
#define size 5
int main()
{
  int a[size] = {1,2,3,4,5};
  int i;
  int *pa = (a+size-1);
  for(i = size; i >0; i--)
  {
    printf("a[%d] = %d\n",i,*pa);
    pa--;
  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...