Q
它是否通过指针?
3
A
回答
5
这是通过价值。
void func(char * b)
{
b = new char[4];
}
int main()
{
char* buf = 0;
func(buf);
delete buf;
return 0;
}
BUF仍然会调用func
和newed存储器将泄漏后为0。
当您通过值传递指针时,您可以更改指针指向的不是指针本身。
正确的方法来做到上述的东西将是
ALTERNATIVE 1
void func(char *& b)
{
b = new char[4];
}
int main()
{
char* buf = 0;
func(buf);
delete buf;
return 0;
}
通知指针通过引用而不是值传递。
ALTERNATIVE 2
另一种方法是将指针传递到一个指针像
void func(char ** b)
{
*b = new char[4];
}
int main()
{
char* buf = 0;
func(&buf);
delete buf;
return 0;
}
请注意,我不以任何方式提倡使用裸指针和像上面手工存储器管理的而只是说明传递指针。 C++的方式是使用std::string
或std::vector<char>
。
0
指针不会被改变。通过指针传递意味着传递一个地址。如果你想改变指针,你必须传递一个双指针来尊重它。
foo(char **b)
{
*b = NULL;
}
0
指针本身正在通过值传递(指向的内存被指针传递)。更改函数内部的参数不会影响传入的指针。
0
要通过“传递指针”来实现引用语义,必须发生两件事情:调用者必须将“地址 - 传递,被调用者必须取消引用指针。
可以通过使用数组来遮蔽其中的一部分,该数组会衰减为指向第一个元素的指针 - 从这个意义上讲,数组内容总是“通过引用传递”。不过,您可以使用“一个数组”来模糊解引用。
这是直线前进之路探寻:
void increment_me(int * n) { ++*n; } // note the dereference
int main() { int n; increment_me(&n); } // note the address-of
这里是变相相同:
void increment_me(int n[]) { ++n[0]; } // no visible *
int main() { int n[1]; increment_me(n); } // or &
相关问题
- 1. 通过指针
- 2. 通过指针
- 3. 通过指针
- 4. 通过指针
- 5. 通过指针指向指针
- 6. 分配给指针的指针:我是否应该释放它?
- 7. SQLX通过指针
- 8. 要通过指针
- 9. Ç - 通过指针
- 10. 通过指针数组增加指针
- 11. 指针通过指针不起作用
- 12. MPI发送通过指针指针c +
- 13. 测试指针是否超过的UIElement
- 14. flatbuffers:是否可以通过根指针删除缓冲区
- 15. 当通过指针访问时,NAN是否返回false?
- 16. 与通过使用指针的指针的指针
- 17. 通过引用通过指针
- 18. 删除指针是否删除它指向的内存?
- 19. 通过指针用C
- 20. 通过findViewById的空指针
- 21. 通过指针复制NSMutableDictionary
- 22. C++ - 代表通过指针
- 23. 通过指针排序
- 24. 迭代通过指针
- 25. EXC_BAD_ACCESS当通过NSDate指针
- 26. 成本通过指针
- 27. 通过指针打印值
- 28. 通过返回指针
- 29. 指针的过早缺失通过共享指针
- 30. 通过网络发送指向静态函数的指针是否安全?
洛尔和RAM将被泄露:) –
@MichaelDorgan为什么 –
呼唤新的直接无呼叫删除。与通过指针或值传递无关。 –