开发者社区> 问答> 正文

C++中关于函数形参是数组引用的问题?报错

目的:输入一个正整数n,动态创建一个大小为n的int数组,然后通过传递引用参数,打印数组元素


#include<iostream>
#include<algorithm>
using namespace std;
int n;
void print(int (&arr)[n])
{
    for(int i=0;i!=n;++i)
    {
        cout << arr[i] << endl;
    }
}
int main()
{
    cin >> n;
    int* a =new int[n];
    fill(a,a+n,0);
    print(a);
    return 0;
}

上述代码编译报错,

错误信息:
error: variable or field 'print' declared void|
error: 'arr' was not declared in this scope|
环境:CodeBlocks 12.11


展开
收起
爱吃鱼的程序员 2020-06-22 19:49:07 759 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    C++可以用模板,靠编译器取长度。动态的,据我所知,必须得传长度的参数。

    这里void  print(int  (&arr)[n])

    和这里 http://baike.baidu.com/view/2129184.htm

    然后这里 

    (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

    很烦人的语法知识就是如此了。
    改为void  print(int  *arr)差不多也就是这样了哈。

    引用来自“maksim”的答案

    这里void  print(int  (&arr)[n])

    和这里 http://baike.baidu.com/view/2129184.htm

    然后这里 

    (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

    很烦人的语法知识就是如此了。
    改为void  print(int  *arr)差不多也就是这样了哈。

    额不好意思,以为是单纯某些问题,赞同楼下说法int*a不是数组,也就无从从数组引用上面来说了。

    引用来自“chao_83”的答案

    C++可以用模板,靠编译器取长度。动态的,据我所知,必须得传长度的参数。

    int*a=new  int[n];

    a完全不具有数组的任何信息,或者说根本就不是一个数组,不能通过所谓数组引用进行长度推测。

    应该是你说的这样,当时确实没想到这点可以voidprint(int*&a);这样是引用(指针)变量a,你可以改a,可以改*a,但是得不到长度n。嗯,引用挺强大的用vector吧。嗯,
    2020-06-22 19:49:22
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载