目录
1.指针是什么
指针是内存中一个最小的单元编号,也就是地址
通常我们口中说的指针其实是指针变量:变量中存放着地址
那么地址,内存,指针又有怎样的关系?
为了对内存更方便的管理使用,我们把内存划分为一个一个小格子
一个内存单元是1个字节
为了很好的定位到内存单元,我们给每个单元一个编号,这个编号也就是地址
指针变量就是存放我们需要的地址,方便我们需要时直接使用
如何去创建指针变量,并且存放地址呢?
int a=0;
int* p=&a;//此处*代表创建的是指针变量,给p赋值的是a的地址
//int* 中int 告诉我们指针变量p指向的对象是int类型
下面我们以这段简单代码举例
int main(){
int a = 10;
int* p = &a;
return 0;
}
这其中原理可以用图表示
注:指针变量p存储的是a变量的首地址
因为我们只需要知道a变量首地址,依次向后+1,就可以知道a变量所有的地址
总结:地址标识内存,指针存放地址,而创建指针又需要新的内存空间
内存空间有多大?
这跟电脑是32位机器还是64位机器有关,对于32位机器,它有32根地址线,每根地址线在寻址时产生高电压和低电压对应的是1和0,32根就是2^32Byte=2^22KB=2^12MB=4GB(内存空间)
在2^32种情况中,每种情况是32个0,1组成,是32个bit位,4个字节,而一个16进制数字占0.5个字节,所以地址是8个16进制数字组成,如
这样的地址可以标识一个1字节内存空间,2^32种地址标识2^32字节也就是4GB空间。
注:这里32位机器地址占4字节,但它代表的内存空间占1字节
总结:
- 指针用来存放地址,地址唯一标识一块内存空间
- 指针大小在32位平台是4字节,在64位平台是8字节
2.指针类型
不同类型的指针大小是否相同?
#include<stdio.h>
int main() {
int a = 0;
int* pa = &a;
char b = 'a';
char* pb = &b;
printf("%d\n", sizeof(pa));
printf("%d", sizeof(pb));
return 0;
}
结果都是4,我们发现不同类型的指针他们的大小是一样的依然是32位平台是4字节,在64位平台是