指针初始化的相关细节
指针定义
指针是用于存出数据或函数的内存地址的变量。
数据类型* 变量名
指针赋值
利用两种方式实现指针变量指向特定内存地址。
1.利用指针地址(&)分配变量的地址
int x=10;
int*P;
*p=&x;//使用取地址操作符获取变量的地址
这里假设变量x的地址是0x1111,指针变量p,它也是一个变量,有自己的地址0x5555,但指针变量p内存储必须为一个地址,这里它保存x变量的地址。
2.让指针变量指向来自堆的动态内存分配
int *ptr;
ptr=(int*)malloc(sizeof(int)*count);
这里ptr作为指针变量,有自己的地址为0x1111,它指向堆中的一块内存,这块内存地址为0x0011
指针变量的大小
一般来说在x86平台下指针变量大小为4字节,在x64平台下为8字节,这里与它指向什么类型变量无关,无论它指向一个int型变量还是一个占很大内存的数组或结构体,但它本身只有四字节。
指针解引用
在第一张图中,通过取值操作符*指针变量例如(*p)就可以访问指针变量p中储存的地址所对应的值。
多级指针
int x=10;
int*p=&x;
int **q=&p;
如图
在二级指针q中保存一级指针p的地址,在它定义时必须定义为int**才课保存一级指针的地址;它进行解引用时q=0x555,*q=0x111,
**q=10