【问题标题】:Need help in understanding the below c++ code在理解以下 c++ 代码时需要帮助
【发布时间】:2017-09-18 04:57:12
【问题描述】:
#include<iostream>
using namespace std;
int number(int (&a)[10])
{
    int n= sizeof(a)/sizeof(a[0]);
    return n;
}
int main()
{
    int n;
    cout << " Enter the number of elements ";
    cin >> n;
    int a[10];
    cout << "Enter array elements : ";
    for(int i=0;i<n;i++)
        cin>>a[i];
    cout<<" The number of elements according to main is "<< sizeof(a)/sizeof(a[0])<<endl;
    cout<<"  The number of elements in the function number is " << number(a);
}

在上面的代码中的主函数“number(a)”中,我们到底传递了什么,方法取了什么。以及代码在函数中是如何工作的。如果我们在数字函数中不使用“&”符号会发生什么。

我的理解是我们将指向第一个元素的指针传递给函数,但我不知道正确。

【问题讨论】:

  • 代码在几个不同的级别上确实非常非常错误。无论你想学习什么,你都应该参考一个完全不同的例子。
  • 它是对 10 个整数数组的引用。 cdecl.org/?q=int+%28%26a%29%5B10%5D您可以使用模板对其进行概括:stackoverflow.com/questions/2384107/…
  • @Saustin 这是一道考试题,我们需要解释答案中的输出。
  • 这是一道考试题?哎呀。您可以回答很多问题,但它们都可能是错误的,因为我非常怀疑您的教授知道他在做什么。我强烈建议您在线查看不同的示例,以获得比您的教授更好的理解。
  • 当有人输入 50 作为项目数并在分配的内存之外写入时会发生什么?似乎是一个相当愚蠢的考试问题。

标签: c++


【解决方案1】:

当您调用number(a) 时,您传递的是对10 个ints 数组的引用。

让我们用一个更简单的函数。

void foo(int& ref) { }

你可以调用它

int i = 20;
foo(i);

这里,对变量i 的引用传递给函数。您可以通过ref 访问foo 中的变量i 的值。您对foo 中的ref 所做的任何更改都将在调用函数中可见。

同样,您的函数引用类型为“10 个ints 的数组”的变量。该函数对引用所做的唯一事情就是计算数组元素的数量。

它使用了一些冗余逻辑。您可以将该函数简化为:

int number(int (&a)[10])
{
    return 10;
}

该功能的使用范围有限。如果您有一个 float 类型的数组或者如果您有一个包含 20 个元素的数组,则它不会工作。您可以创建一个模板函数,使其更通用。

template <typename T, size_t N>
size_t number(T (&arr)[N])
{
   return N;
}

上述函数将适用于不同对象类型和大小的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多