目的:输入一个正整数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
C++可以用模板,靠编译器取长度。动态的,据我所知,必须得传长度的参数。
这里void print(int (&arr)[n])
和这里 http://baike.baidu.com/view/2129184.htm
然后这里
(6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
很烦人的语法知识就是如此了。
改为void
print(int
*arr)差不多也就是这样了哈。
这里void print(int (&arr)[n])
和这里 http://baike.baidu.com/view/2129184.htm
然后这里
(6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
很烦人的语法知识就是如此了。
改为void
print(int
*arr)差不多也就是这样了哈。
C++可以用模板,靠编译器取长度。动态的,据我所知,必须得传长度的参数。
int*a=new int[n];
a完全不具有数组的任何信息,或者说根本就不是一个数组,不能通过所谓数组引用进行长度推测。
应该是你说的这样,当时确实没想到这点可以voidprint(int*&a);这样是引用(指针)变量a,你可以改a,可以改*a,但是得不到长度n。嗯,引用挺强大的用vector吧。嗯,版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。