开门见山,如果把计算机的内存空间比作是一排房子,那指针就是房门号。指针实际上就是一个用来存储内存地址的整数,与类型没有关系,我可以定义一个void类型的指针:
#include <iostream>int main()
{int var = 8;void* ptr = &var;std::cin.get(); //设置断点
}
设置断点后Debug可以看到:
到Memory中输入ptr的值可以看到:
在4个字节的内存空间中,存放了var的值8。
既然指针是一个数,那它应该也有地址呀,指针的指针?当然有:
#include <iostream>int main()
{int var = 8;void* ptr = &var;void* ptr1 = &ptr;std::cin.get();
}
我们发现红线的4个字节存放了指针的值,而它刚好就在存放var值8(蓝线)的8个字节前。
如果我们想通过指针ptr去给var赋值,那类型就不能为void,否则会报错:
#include <iostream>int main()
{int var = 8;int* ptr = &var;*ptr = 10;std::cin.get();
}
指针只说明了内存地址,并不包含内存块大小的信息,如果我们想使用指定大小的内存,可以这样:
#include <iostream>int main()
{char* buffer = new char[8];memset(buffer, 1, 8);std::cin.get();
}
输入buffer的值,可以看到8个字节的内存空间,且被置为1: