使用c ++中的指针查找偶数

时间:2015-03-29 09:00:21

标签: c++ pointers

我正在做关于指针的任务。在其中一个问题中,它要求我在数组中找到偶数并打印所有数字。 我还必须使用作业给出的签名,我不能使用&我的函数中的运算符或[]表示法。

签名:void print_evens(int *nums,int length) ;

我知道我必须使用,

if(i%2==0)
  cout << i << endl;

找到偶数,但我不知道如何使用指针。

如何将数组从main函数传递给print_evens,因为数组没有参数?

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

  

如何将数组从main函数传递给print_evens,因为数组没有参数?

无论签名如何,您都不能将数组传递给函数。在这种情况下,数组会衰减指向它们的第一个元素。

在任何情况下,您都需要取消引用指针以获取当前位置的值。

for (int i = 0; i < length; ++i) {
    int current = *(nums + i);
    if ((current % 2) == 0)
        cout << current << endl;
}

你可以传入你的数组(当然会衰减到指针)

#define len 10

int main(void) {
    int arr[len];
    /* initialize elements of arr */    
    print_evens(arr, len);
}

答案 1 :(得分:0)

请考虑以下代码:

void print_evens(int *nums,int length){

    for(int i = 0 ; i<length ; i++){
        int currNum = *(nums+i);
        if(currNum%2 != 1)
            cout<<currNum<<endl;    
    }
}

它会做你想要的。

但它是如何完成的,因为nums是一个指针,所以你可以通过向它添加数字来简单地迭代它。每次你认为你正在使用数组时,实际上它是指向你使用的数组的指针。

根据我们的标准:

6.5.2.1数组下标

  

后缀表达式后跟方括号[]中的表达式   是数组对象元素的下标。该   下标运算符[]的定义是E1 [E2]与...相同   (*((E1)+(E2)))。

所以即使在数组中,当你说nums [i]它意味着*(nums + i),并且使用这个事实你可以简单地使用指针。

答案 2 :(得分:0)

void print_evens(int *nums,int length)
{
   for (int i = 0; i < length; ++i) {
      if ((nums[i] % 2) == 0)
        cout<< nums[i] << endl;
   }
}

int main(void) {
    int arr[<size of array you want>];
    //Assign values to array    
    print_evens(arr, len);
}

为方便起见,您可以将指针用作数组。没有人会阻止你: - )

答案 3 :(得分:0)

这是一个示范程序

#include <iostream>

void print_evens( int *nums, int length )
{
    for ( int *p = nums; p != nums + length; ++p )
    {
        if ( *p % 2 == 0 ) std::cout << *p << ' ';
    }
}

int main() 
{
    const int N = 10;
    int nums[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    print_evens( nums, N );

    std::endl( std::cout );

    return 0;
}

输出

2 4 6 8 10 

当然,声明像

这样的函数会更好
void print_evens( const int *nums, size_t length );

常数阵列也可以输出。