[英]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;
您的程序在访问未分配的内存时会调用未定义的行为。 实际上, ptrBr
在ptrBr
指向数组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.