我正在做关于指针的任务。在其中一个问题中,它要求我在数组中找到偶数并打印所有数字。 我还必须使用作业给出的签名,我不能使用&我的函数中的运算符或[]表示法。
签名:void print_evens(int *nums,int length) ;
我知道我必须使用,
if(i%2==0)
cout << i << endl;
找到偶数,但我不知道如何使用指针。
如何将数组从main函数传递给print_evens
,因为数组没有参数?
感谢您的帮助。
答案 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 );
常数阵列也可以输出。