想要理解指针 ,就要先了解内存
内存是什么?
``内存是电脑上重要的存储器,程序都是在内存中运行的
为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元大小是一个字节,为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
我们的电脑是有内存和硬盘的,比方说
那么这么大的内存如何划分给程序使用呢?
我们这里把内存划分成为一个小格子
我们在这里给每个小格子一个编号,这里的编号就是内存的地址,也就是说编号就是地址
那么如何使用呢?
这里就牵扯到俩个操作符 &取地址符和*解引用操作符
先创建一个变量
我们这里按下F10
(如果按下F10没有出现监视和内存窗口的话可以在最上面 调试->窗口中打开)
地址是一个0x开头的序列(16进制)
我们这里可以看到变量a占用了4个字节,每一个字节都有一个地址,&a拿到的是第一个字节的地址
从这里可以看到,我们在变量中不管占多少字节 &a 拿到的都是第一个地址
创建一个变量来储存地址
这里的b就是一个指针变量,下面让我们来详细了解一下
*说明 b是指针变量
int* 是一个类型 一个整型指针类型 int说明b指向的对象是int类型
`
*b = 20;//*号是解引用操作*b就是通过b中存放的地址指向a的空间 这里等同于a=20
指针变量的大小?
int main()
{
printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(double*));
}
(sizeof计算的结果是无符号的整数,可以使用对应的格式&zu)
指针变量的大小取决于地址的大小
32位平台下地址是32bit位(4个字节)
64位平台下地址是64bit位(8个字节)