C++静态空指针
C++ static null pointer
我无法弄清楚以下情况:我有3节课:
AA.h
class AA
{
public:
AA();
static CC *i;
};
BB.h
class BB
{
public:
BB();
void static setI(CC *i);
};
CC.h
class CC
{
public:
CC();
};
AA
.cppAA::AA(){}
CC *AA::i= nullptr;
BB
.cppBB::BB(){}
void BB::setI(CC *i)
{
i = new CC();
cout<<i<<endl;
cout<<AA::i;
}
CC
.cppCC::CC(){}
所以我在 A 类中有一个 CC 类型的静态点。我以以下方式开始主要:
int main(int argc, char *argv[])
{
BB::setI(AA::i);
return 0;
}
我得到的输出是
//0xaeed70
//0
那么为什么AA::i
不等于i
呢?
BB::setI
的参数类型是CC *i
,指针本身是按值传递的,i
是从参数中复制的。对函数内部i
的任何修改都与原始参数AA::i
无关。
你想要的可能是按引用传递的,即
void BB::setI(CC *&i)
{
i = new CC();
cout<<i<<endl;
cout<<AA::i;
}
在表达式中i = new CC()
变量i
是函数BB::setI
的局部变量,该变量使用 AA::i
的值初始化,因为您调用了像 BB::setI(AA::i);
这样的函数。将任何值分配给i
只会更改此局部变量的值,而不会更改调用函数时用于初始化它的其他变量的值。
这与这个较小的示例完全相同:
int i = 0;
void setI(int x)
{
x = 1234;
cout << x << endl;
cout << i;
}
int main()
{
setI(i);
}
正如您在此处更清楚地看到的那样,您正在为函数的参数分配一个新值。
此参数与 AA
的成员无关。
无论其类型如何,如果希望函数修改对象,都需要向它传递对该对象的引用(或指针(;不能传递对象的值。
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尝试将对象插入空指针数组时出现分段错误
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 是否允许向空指针添加零?
- 为什么 C 样式字符串的工作空指针检查不?
- 在函数内初始化无符号字符指针将返回空指针
- 为什么多维数组中的空字符串文本衰减为空指针?
- C++ 取消引用指向矢量的空指针时的分段错误
- 错误 C6011:取消引用空指针"NAME"。C++
- cppcheck取消引用空指针
- 函数指针静态,构造函数
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- C++静态空指针
- 指向自定义类型的静态指针在初始化后使用相同类型的静态非空指针保持 nullptr