传递给函数的 C++ 空指针
c++ empty pointer passed to function
void foo(int* a, int* b){
b=a;
}
int main(int argc, char** argv)
{
int* a=new int(3);
int* b=NULL;
foo(a, b);
printf("b=%dn", *b);
}
我希望看到 b=3 被打印出来,但是,它是一个 SIGSEGV。我想知道为什么 b 即使我指向 in side foo() 也没有指向任何东西?
按
值C++副本。这意味着在变量通过参数传递后,您基本上只复制变量的值。函数内部的b
只是 main 中b
的副本,一旦函数结束,它就会消失。
如果要对实际值进行操作,则必须使用引用。使用 int* &
作为类型来获取"对指向类型 int 的指针的引用"。引用保留函数内部发生的状态更改,并将更改 main()
中 b
的值。
但是,建议您不要这样做。如果您打算在函数意义上将函数定义为过程子例程,那么让函数修改状态可以被认为是不好的风格。原因是,对于哪些函数更改其输入或不更改,而不必努力操作现有类型系统,并没有真正明确的区别。
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尝试将对象插入空指针数组时出现分段错误
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 是否允许向空指针添加零?
- 为什么 C 样式字符串的工作空指针检查不?
- 在函数内初始化无符号字符指针将返回空指针
- 为什么多维数组中的空字符串文本衰减为空指针?
- C++ 取消引用指向矢量的空指针时的分段错误
- 错误 C6011:取消引用空指针"NAME"。C++
- cppcheck取消引用空指针
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 递增空指针无法正确设置值
- Qt - 将空指针(原始数据)转换为 QImage 并将其显示在标签上
- 将多映射转换为空指针,然后转换回多映射