繁体   English   中英

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

[英]In C programming, I'm trying to print my array in reverse using pointers but I can't seem to get it

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

#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;
}

您的代码具有未定义的行为,因为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现在在此位置。

在打印循环之前重置ptrBr

ptrBr = br;

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

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

只需添加一个附加的ptrBr++; 在第一个for循环之后。 自从您的第一个for循环的最后一次执行以来,做了一个额外的ptrBr--;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM