0

我在网上搜索但找不到可靠的答案。什么会

someclass* ptr = 1;
char* charptr = 2;

或将它们分配给任何其他整数均值?

如果我在使用指针之前不初始化指针(对于本机数据指针和类指针)会怎样?

4

2 回答 2

3

将指针设置0为等同于将其设置为NULL。但是,这仅适用于常量表达式 0,即编译时零值。尝试设置指向运行时零值的指针不能保证产生空指针

int *pi = 0; // Initializes a null pointer
char *pc = 2 - 2; // Initializes a null pointer
short *ps = sizeof *pc - 1; // Initializes a null pointer

int x = 0;
double *pd = (double *) x; 
// Implementation-defined, not guaranteed to produce a null pointer

您可以更详细地探讨这个问题C FAQ

要回答您问题的第二部分:

将任何其他整数(除了文字/常量 0)分配给指针是非法的。您的任何初始化(或分配)都不会编译。它在 C 和 C++ 中都是非法的,尽管 C 编译器历来在这方面更允许,以警告响应而不是拒绝编译代码。

此外,在 C++ 语言中,如何处理指向类类型的指针也没有区别。指向类类型的指针仍然被认为是标量类型,并且在这方面的行为与任何指向基本类型的指针相同。

于 2012-07-05T14:31:40.777 回答
1

是的,在 C++ 中,NULL 被定义为 0。将指针设置为其他一些小的整数值将意味着它指向 - 可能是非法的 - 计算机内存的一部分(但它不会被视为 NULL 指针)。

如果您不初始化全局指针,它将在程序启动之前为您设置为零(NULL)。如果您不初始化堆栈上声明的指针变量(即在函数或方法中),它们中就会有垃圾。同样,任何动态分配的指针或作为数据成员包含在对象中的任何指针的内容也将没有预定义的值。一些编译器具有扩展,允许对动态分配的内存的请求最初归零,就像 C 的calloc()函数对原始内存所做的那样。

于 2012-07-02T08:55:22.337 回答