指针:就是地址,是由解引用操作符来找到所想要的对象,
指针变量:是用来存放别人的地址的
内存是怎么编号的?
一般计算机是32位或者64位,例:32位的计算机是有32根地址线而地址是物理线是可以通电的,正电就是1,负电就是0,而这些线全部通电有些电是正的有些是负的,而这些电就会产生电信号,
电信号就会转换成数字信息:1和0组成的二进制序列
而32根二进制序列信号会产生可能性
00000000000000000000000000000000
0111111111111111111111111111111111111111
1000000000000000000000000000000
11111111111111111111111111111111111111111把这样的二进制序列就是内存的编号,二进制序列有2的32次方个,这些二进制序列都可以作为内存的编号,当这些二进制序列当成编号,这些编号就称为内存单元的地址
一个这样的内存单位给多大的空间呢?
假设一个内存单元是1bit
2的32次方是100000000000000000000000000000000换成bit就是
c语言中最小的char类型而char是1byte(字节)-8bit(比特位)-8个地址,如果一个地址是1个bit的话太浪费太细了,而最终的一个内存单位是1个字节的话就比较合适,1个字节给1个地址
a在内存中要分配空间-4个字节
%p是专门用来打印地址的
&a:取a的地址,不会哪全部地址,只会拿4个字节的第一个字节的地址
pa是用来存放地址的,在c语言中pa叫指针变量
*是说明pa是指针变量的
int是说明pa执行的类型对象是int类型
这里的a的值是10,*pa是通过pa里面的存放的a的地址找到a,而*pa可以间接改变a的值
*:解引用操作(*是单目操作符)
指针变量的大小
为什么全部类型打印出来的大小大都是一样的呢?
指针的类型大小都是一样的,因为指针式用来存放地址的,指针需要多大空间,取决于地址存储需要多大空间
32位的平台打印出来的是32bit也就是4个byte
64位的电平台打印出来的数63bit也就是8个byte