在函数中初始化的c++数组不能在main中访问
C++ array initialized in function cannot be accessed in main
我有一个函数用于在c++中初始化数组。初始化后,main不能访问数组中的数据。不知道为什么。任何帮助吗?
void testArray(int *listPtr)
{
listPtr=new int[2];
listPtr[0]=0;
listPtr[1]=1;
}// end testArray
void main()
{
int *list;
testArray(list);
cout<<list[0]<<list[1]<<endl; // this gives some random output
} // end main
这是因为指针是按值传递的。函数的参数被复制,函数的第一行用new表达式的结果替换指针的本地副本。指针的原始副本,回到main()
,不受此影响。
你可以通过引用传递指针来"修复"这个问题:
void testArray(int*& listPtr)
{
listPtr = new int[2];
// ...
}
int main()
{
int* list = 0;
testArray(list);
// ...
delete list;
return 0;
}
或通过向指针传递一个指针:
void testArray(int** listPtr)
{
*listPtr = new int[2];
// ...
}
int main()
{
int* list = 0;
testArray(&list);
// ...
delete list;
return 0;
}
或者,更好的是,使用提供值语义(与引用参数一起)的c++标准库容器:
void testVec(std::vector<int>& list)
{
list.resize(2);
list[0] = 0;
list[1] = 1;
}
int main()
{
std::vector<int> list;
testVec(list);
// ...
return 0;
}
类比时间:
出现这个问题是因为指针是一个单独的实体(对象),指向另一个对象。指针可以像普通对象一样复制,并且不需要特别考虑它们,以确保它们所指向的对象被更新以反映对指针的任何更改。参考文献是完全不同的东西。一旦引用被绑定到某个对象上,它就(从所有意图和目的上)与对象本身无法区分;对引用的任何操作都是对底层对象的操作。你可以这样想:你有一只叫路威的猫,你让你的朋友借路威;但你朋友叫她巴菲。这是同一只猫,如果你的朋友修剪了她的爪子,下次你看到毛毛的时候,她就会修剪了爪子。对于指针的例子,你有路威,你给你的朋友一张纸条,上面写着路威的地址。你的朋友去买了一只新猫,并把新猫的地址写在你给他们的纸条上。现在,当你的朋友修剪新猫的爪子时,毛毛什么也没发生。这张纸条只允许你的朋友去路威住的地方;直到你的朋友用另一只猫的地址覆盖了这张纸条。
引用可以更容易地推断代码的行为,并且在几乎所有情况下都应该首选
您需要通过引用传递,以便对指针listPtr
本身的更改可以传递给外部变量。请记住,您正在更改"指针本身"的值,如果通过值传递,则调用者不可见。
void testArray(int * &listPtr)
{
listPtr=new int[2];
listPtr[0]=0;
listPtr[1]=1;
}// end testArray
您需要使用引用传递,以便在testarray函数中初始化listPtr时更新它。
要做到这一点,请执行以下操作-
void testArray(int * &listPtr)
{
listPtr=new int[2];
listPtr[0]=0;
listPtr[1]=1;
}
如果你对上面的解决方案感到困惑,你可以简单地声明并初始化这个全局
相关文章:
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- 我不能访问基类的函数
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 为什么我的基类指针变量不能访问派生类中的函数?
- 为什么friend函数不能访问类的私有成员
- 当子对象引用被分配给父对象指针时,为什么不能访问子类
- c++声明向量数组以获取类,但不能访问成员变量
- C2248:不能访问类中声明的私有成员
- c++友元函数不能访问私有成员
- 不能访问类中声明的私有成员
- 我的map迭代器不能访问map的每个元素,我该如何修复它?
- c++ char指针数组-不能访问元素
- c++友元函数不能访问私有成员;错误2248
- 不能访问指针-向量映射元素
- 友元方法不能访问嵌套类
- 不能访问2d对象指针数组的类成员(类型***)
- 不能访问同一类的私有成员
- 好友父类不能访问子类中的私有构造函数
- 错误继承不能访问c++的方法
- 私有继承的派生类的对象不能访问基类成员函数