引用数组涉及的技术问题
Technicalities involved with array of references
我为以下问题编写了这段代码。我的编译器给出了以下错误-[error]将"a"声明为引用数组。问题出在哪里?
void repfunc(int& a[],int size){
for(int i=size-1;i>=0;--i){
if(a[i]==0){
a[i]=1;
return;
}
for(int j=i-1;j>=0;--ji){
if(a[i]==a[j]&&a[i]!=9){
++a[i];
a[i]%=10;
return;
}
else if(a[i]==a[j]&&a[i]==9){
a[j-1]++;
a[j-1]%=10;
FOR(k, 1,size-j){
a[k]=k;
}
return;
}
}
}
}
正如错误所说,不能有引用数组。看起来您实际上是在尝试通过引用传递数组。您可以(在某种程度上)通过将其更改为将指针指向数组的开头来做到这一点:
void repfunc(int a[], int size) // equivalent to "int * a"
由于数组可以转换为指针,因此如果参数是数组,这将做正确的事情
int a[4] = {1,2,3,4};
repfunc(a, sizeof a / sizeof a[0]);
或者,您可以接受对正确大小的数组的引用:
template <size_t size>
repfunc(int (&a)[size])
允许自动推断的大小
int a[4] = {1,2,3,4};
repfunc(a);
但请注意,这仅在CCD_ 1实际上是阵列的情况下有效;而不是,例如指向动态分配的数组的指针。
C++标准8.3.2/4明确指出:
不应有对引用的引用,不应有引用数组,也不应有指向引用的指针
实际上,引用必须总是引用某个东西——没有空引用这样的东西。这就是为什么不能有引用数组的原因,因为没有办法将数组中的引用默认实例化为有意义的值。-来源在这里
并且通过指针算术访问By origin数组。所以,如果我们想支持引用数组,我们必须支持指向引用的指针,这是不可能的。这些就是引用数组不可能的原因。这就是你所做的
正如Mike Seymour提到的:void repfunc(int a[], int size)
完全适合您的情况。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- C++ 关于指针取消引用的技术问题
- 暴力破解技术解决以下问题
- 引用数组涉及的技术问题
- 选择一门语言学习真的很重要吗?他们都使用相似的技术来解决问题
- SonarQube显示问题,但0天技术债务
- 多线程应用中的设计和技术问题