void func(char* buf) { buf++;}
我应该称它为指针传递还是值传递(值是指针类型)?在这种情况下,传入的原始指针会被改变吗?
最佳答案
这是按值传递。
void func( char * b )
{
b = new char[4];
}
int main()
{
char* buf = 0;
func( buf );
delete buf;
return 0;
}
调用 func
后 buf 仍为 0新的内存将泄漏。
当您按值传递指针时,您可以更改指针指向的内容,而不是指针本身。
做上述事情的正确方法是
备选方案 1
void func( char *& b )
{
b = new char[4];
}
int main()
{
char* buf = 0;
func( buf );
delete buf;
return 0;
}
注意指针是通过引用而不是值传递的。
备选方案 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>
反而。
关于c++ - 它是通过指针传递的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435784/