void print(int *xp, int len) {
while (len--)
cout << *xp++ << " ";
cout << endl;
}
int main(int argc, char** argv) {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i=10; i>0 ; i--)
print(array, i);
return 0;
}
输出
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
单独修改print()以生成以下输出:
1 3 5 7 9
1 3 5 7 9
1 3 5 7
1 3 5 7
1 3 5
1 3 5
1 3
1 3
1
1
我尝试了这个,但它打印出所有1的
#include <iostream>
using namespace std;
void print(int *xp, int len) {
while (len-- && *xp%2 != 0)
cout << *xp << " ";
cout << endl;
}
int main(int argc, char** argv) {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i=10; i>0 ; i--)
print(array, i);
return 0;
}
答案 0 :(得分:1)
一旦while
内的条件为假,它将停止打印。因此,在*xp
为偶数时修改后的代码中,它会停止整个循环。
你要做的是要么不对偶数执行std::cout
语句(注意指针也不会移动)或每次跳2。请注意,这两种方法都有一些细微之处,实现与原始代码一样使用指针的目标也是非常重要的。
答案 1 :(得分:0)
您没有更改xp
的值,因此始终打印数组的第一个元素。
您想要计算i
的指数:0 - &gt; len
并打印*(xp+i)
void print(int *xp, int len) {
for(int i = 0; i<len;i++){
if (i%2 == 0)
cout << *(xp+i) << " ";
}
cout << endl;
}