当您初始化一个没有任何内容的指针(NULL)时,该元素仍然具有足够大的内存地址以用于该指针的初始化类型(4个字节用于int,1个用于char等),但是为什么呢,因为它在技术上什么都没有,甚至不是零值?我的意思是,NULL不能是像0这样的固定值,因为零仍然被认为是一个值,所以它还不止于此? 示例:
#include <iostream>
int *a=NULL;
int main()
{
std::cout <<&a; //it will show the address in hexadecimal system;
return 0;
}
答案 0 :(得分:3)
您的程序无法回答您所提出的问题。该程序显示,是的,指针具有一个地址,它需要一个地址来存储值(它指向的地址)。当您打印该值时,您会看到它确实是nullptr
(因为这是C ++而不是C)。
#include <iostream>
int *a= nullptr;
int main()
{
std::cout << &a << '\n'; // Will show the address OF THE POINTER in hexadecimal system;
std::cout << a << '\n'; // Will show the address at a is pointing to.
return 0;
}
输出:
0x601180
0
答案 1 :(得分:0)
我很确定有重复的记录,但是现在看不到。您在不同的上下文中混淆了运算符*
和&
的含义。
在这里,&p
表示“ p
的地址”。 p
是什么? p
是指针类型的 global 变量。接受任何全局变量的地址都是完全有效的。
所以,要清理一下:
#include <iostream>
int *a=NULL;
int main()
{
std::cout << &a; //perfectly valid, address of p, type int** (pointer-to-pointer-to-int)
std::cout << a; //still valid, it gives address to where p is pointing, i.e. 0 (NULL)
std::cout << *a; //wrong, dereferencing an invalid address, there's no memory allocated
return 0;
}
您似乎对指针也没有多少误解:
NULL
被定义为正好0
(或在新标准中为nullptr
):https://en.cppreference.com/w/cpp/types/NULL