指针初试篇;
1.
a创建时会向内存申请4个字节:
a申请的4个字节都有地址,但是二进制太长而且不太方便,所以我们会把4进制转换为1个16进制。下面是关于进制的内容:
二进制只能出现0和1,
八进制中只能出现0~7的数字,
十进制中可以出现0~9中的数字,
16进制中可以出现0~9和a(10),b(11),c(12),d(13),e(14),f(15)
二进制中1111在十六进制表示15
&a就是曲a变量的地址,&叫做取地址操作符
%p是专门打印地址的,
从结果看出只打印了一行地址:
2.为什么呢,我们调试一下,看一下
打开内存窗口后 在地址处输入&a,查看
(查看教程如下,先按F10,创建a,在调试窗口找到内存窗口就行啦)
2个16进制表示1个字节
说明我们打印的是a所占内存空间中的第一个字节的地址
(每一次&a的地址都不一样,都是随机的,内存中的地址不一样,只要我们重新创建a,是由编译器重新指派地址的)
3.一个内存单元地址有什么用呢??
首先,
把a的地址存放pa中,pa就叫做指针变量,它的类型是 int *
它先把一个地址存到一个变量中,(地址值是一个16进制数字,各种进制只是数字形式不同,)
0xb是11的16进制的写法
013也是11的8进制的写法
内存布局:
1.首先向内存申请4个字节
2.这4个字节空间地址名字叫做a
3.这4个空间起始地址是0x0012ff40
4.这4个字节中放的值是1
取地址a的时候就是取起始地址,把起始地址放到一个变量中(pa中存放的是a的4个字节中的第一个地址),这个变量就叫做pa, pa中放的值就是a的起始地址0x0012ff40,因为通过地址就能找到a,所以形象的称为pa指向a。
那么pa 就被称为指针变量 写法:int * pa
*告诉我们pa是指针
Int 告诉我们pa指向的是int 类型的变量
内存布局图如下:
*pa通过pa里面的地址找到a
说明*pa通过解引用操作找到a的地址,改变了a的值,(不能说把地址改为20,地址是不能更改的)
指针变量是用来存放地址的,但也可以通过指针变量里存放的地址解引用操作找到它所指代的对象
指针变量的大小:
指针变量占用的内存空间大小根据所使用的操作系统及编译环境而定
在32位操作系统下,每个指针变量的大小都是4 ? why????
指针变量大小是多少呢??
我们这样考虑:
首先指针变量是干什么的?------指针变量是存放地址的。
我们再考虑地址
在32位的机器上,指针变量存放的是32个bit位的地址,即就是4个字节。
由此可得64位机器上得到是8个字节