我知道这有一个非常简单的解释,但是我已经被一段时间不必使用指针所困扰了.
为什么我不能在c ++中做这样的事情
int* b;
foo(b);
Run Code Online (Sandbox Code Playgroud)
并通过...初始化数组
void Something::foo(int* a)
{
a = new int[4];
}
Run Code Online (Sandbox Code Playgroud)
在调用foo(b)之后,b仍为null.为什么是这样?
Kon*_*lph 13
指针按值传递给函数.从本质上讲,这意味着复制指针值(但不是指针!).您修改的只是原始指针的副本.
有两种解决方案,都使用额外的间接层:
要么使用参考:
void f(int*& a) {
a = new int[4];
}
Run Code Online (Sandbox Code Playgroud)或者你传入一个指向指针的指针(在你的情况下不像传统参数那样常规):
void f(int** pa) {
*pa = new int[4];
}
Run Code Online (Sandbox Code Playgroud)
并调用这样的函数:
f(&a);
Run Code Online (Sandbox Code Playgroud)就个人而言,我不喜欢这两种风格:参数是函数输入,输出应该由返回值处理.到目前为止,我还没有看到在C++中偏离此规则的令人信服的理由.所以,我的建议是:改用以下代码.
int* create_array() {
return new int[4];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |