在C编程中,我试图使用指针反向打印我的数组,但我似乎无法得到它

时间:2014-04-14 20:09:32

标签: c unix pointers printf

我现在所拥有的不会打印第一个或最后一个数字,我不确定为什么它不是

#include <stdio.h>
int main(){
  int i, j;
  float ar[5] = {12.75, 18.34, 9.85, 23.78, 16.96}, br[5];
  float *ptrAr, *ptrBr;
  ptrAr = ar;
  ptrBr = &br[4];
  for ( i = 0; i < 5; i++) {
    *ptrBr = *ptrAr;
    ptrAr++;
    ptrBr--;
  }
  for ( i = 0; i < 5; i++) {
    printf("%5.2f\n", *ptrBr);
    ptrBr++;
  }
  return 0;
}

4 个答案:

答案 0 :(得分:2)

您的代码有未定义的行为,因为ptrBr设置为br-1 这意味着任何事情都可能发生,即使是众所周知的鼻子恶魔:

ptrBr = &br[4];
for ( i = 0; i < 5; i++) {
  *ptrBr = *ptrAr;
  ptrAr++;
  ptrBr--;
}

将循环更改为:

ptrBr = br+5;
for(i = 0; i < 5; i++)
  *--ptrBr = *ptrAr++;

这也会修复你的输出,因为现在这个地方有ptrBr == br

答案 1 :(得分:1)

在打印循环之前重置ptrBr

ptrBr = br;

答案 2 :(得分:0)

您的程序在访问未分配的内存时会调用未定义的行为。实际上ptrBr在循环结束时指向数组br之前的一个元素 将您的for循环体更改为

for ( i = 0; i < 5; i++) {
     printf("%5.2f\n", *++ptrBr);
}

答案 3 :(得分:0)

只需在第一个for循环后添加一个ptrBr++;。自上次执行第一个for循环后,我们额外执行了ptrBr--;

                ptrBr++;
        for ( i = 0; i < 5; i++) {
                printf("%5.2f\n", *ptrBr);
                ptrBr++;
        }
        return 0;
}