在花费大量时间挖掘相关帖子/在线资源后,我仍然对我的问题感到困惑。 我的示例代码(test.cc)是:
void testsub(const int* &xx );
int main ()
{
int* xx;
xx= new int [10];
testsub(xx);
}
void testsub(const int* & xx){}
编译错误消息(pgcpp)读取
"test.cc", line 7: error: a reference of type "const int *&" (not const-qualified) cannot be initialized with a value of type "int *" testsub(xx); ^ 1 error detected in the compilation of "test.cc"."
为什么呢?非常感谢您的帮助。 最好的祝愿, 汀
答案 0 :(得分:5)
int*
,则不能使用 const int* &
。
说你有:
const int a = 10;
void foo(const int* & ip)
{
ip = &a;
}
int main()
{
int* ip = NULL;
foo(ip);
*ip = 20; // If this were allowed, you will be able to
// indirectly modify the value of "a", which
// is not good.
}
答案 1 :(得分:3)
如错误消息所示,参数类型不兼容;当你提供指向const int
的指针时,函数需要指向int
的指针。
如果你问为什么那不相容:允许你破坏const正确性,如下例所示:
void testsub(const int* &xx ) {
static const int x;
xx = &x;
}
int* xx;
testsub(xx); // Shouldn't be allowed, because...
*xx = 666; // BOOM! modifying a constant object.
答案 2 :(得分:1)
也许试试这个
void testsub(const int* xx );
int main ()
{
int xx [10];
testsub(xx);
}
void testsub(const int* xx){}
您不需要&,因为您正在传递指针作为参数。
答案 3 :(得分:1)
转发" C-Array" (你的int [10]),你将在你的函数中有一个指向这个数组的第一个元素的指针。
void testsub(const int* xx );
int main ()
{
int* xx;
xx= new int [10];
testsub(xx);
}
void testsub(const int* xx){}
我觉得你对你的书感到困惑,因为他们总是写一些类似于"通过参考调用"。这并不意味着将参数作为参考传递给&amp ;. 通常,将数组的大小传递给函数也很有用......所以它希望:
void testsub(const int* xx, size_t arraySize);
int main ()
{
int* xx;
xx= new int [10];
testsub(xx, 10);
}
void testsub(const int* xx, size_t arraySize){}
现在,您可以访问函数中的数组,如果要使用索引访问数组,则可以检查索引。
void testsub(int* xx, size_t arraySize)
{
for(size_t i=0; i<arraySize; ++i)
// ^ this way you will never try to access
// memory, which does not belong to the array
// => no seg fault, or whatever happens
{
// do sth. with the array ... for example setting values to 0
xx[i] = 0;
}
}