我现在所拥有的不会打印第一个或最后一个数字,我不确定为什么它不是
#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;
}
答案 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;
}