NoT*_*ast 7 c++ arrays pointers
我是C++的新手,我最近遇到了这个问题.
这段代码显然会起作用:
void setvalues(int *c, int *d)
{
(*c) = 1;
(*d) = 2;
}
int main()
{
int a, b;
setvalues(&a, &b);
std::cout << a << b;
}
Run Code Online (Sandbox Code Playgroud)
那么为什么会返回错误呢?Visual C++ 2010错误:
C2664: 'setvalues' : cannot convert parameter 1 from 'int (*)[2]' to 'int *[]'
void setvalues(int *c[2], int *d[2])
{
(*c[1]) = 1;
(*d[1]) = 2;
}
int main()
{
int a[2], b[2];
setvalues(&a, &b);
std::cout << a[1] << b[1];
}
Run Code Online (Sandbox Code Playgroud)
指向数组的指针有什么不同?我四处搜寻但没有运气.
类型int *a[2]表示指向2个指针的数组int,但&a带有定义的表达式int a[2]表示指向数组2的指针int.两者都是不同的类型,它们之间没有转换.正如Vlad已经提到的,要提供正确的类型,您需要添加括号:
void setvalues( int (*c)[2] )
Run Code Online (Sandbox Code Playgroud)
或者您可以在C++中使用实际引用:
void setvalues( int (&c)[2] )
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,您不需要使用address-of运算符或在setvalue函数内取消引用它:
int a[2];
setvalues(a); // this is a reference to the array
Run Code Online (Sandbox Code Playgroud)
编写代码的一种更简单的方法是使用typedef:
typedef int twoints[2];
void setvalue( toints& c );
int main() {
twoints a; // this is int a[2];
setvalue(a);
}
Run Code Online (Sandbox Code Playgroud)