0

我想反向打印指针数组值

#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
4

3 回答 3

2

用这个代替

#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;
}
于 2019-02-28T19:11:11.090 回答
2

你让这太难了。给定一个指向数组的指针,您可以像在数组本身上一样使用索引运算符:

    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 开始,因为上面的示例代码正确说明了这一点。

于 2019-02-28T19:15:25.383 回答
0

您不必使用指针。更简单的实现

#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;
}
于 2019-02-28T19:39:07.863 回答