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

2 回答 2

1

一旦里面的条件while为假,它将停止打印。因此,在您修改后的代码中,当*xp是偶数时,它会停止整个循环。

你想要做的不是std::cout对偶数执行语句(注意指针也不会移动)或者每次跳2。请注意,这两种方法都有一些微妙之处,并且像原始代码那样使用指针来实现目标将是非常重要的。

于 2013-10-14T01:44:10.137 回答
0

您没有更改的值,xp因此它始终打印数组的第一个元素。

您想从i:0 ->开始计算索引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;
 }
于 2013-10-14T01:54:08.237 回答