1.指针==地址
符号:&,取地址符
eg:
int a=10;
&a;// 取得a的整型地址
int *p;//定义整型指针
int *p=&a;//整型指针变量存放整型地址
2. * 在C语言中的含义
①表定义指针,int *p;
②解引用,间接访问符,int *p=&a;//此时p能间接访问a的地址
③表乘法,a*b;
3.指针占的字节数
在X86或者32位平台指针4字节,在X64或者64位平台指针8字节
代码分析:
int main()
{ int a = 10;
int b = 20;
int *p = &a;
*p = 100;//a = 100;
p = &b;
*p = 200;//b = 200;
int **pp = &p;//二次指针
*pp = &a;//p = &a;
**pp = 1000;//(二次解引用:①*pp解引用得到p,②*p解引用得到&a),即可以得到a=1000;
*pp = &b;//p = &b;
**pp = 2000;//b = 2000;
return 0;}
指针相比一般的变量多了一个功能就是解引用(即是间接访问)
数据变量 | 类型 | 取地址 | 指针 |
a | int | &a | int * |
b | double | &b | double * |
p | int * | &p | int ** |
数据变量——>指针 ,通过取地址符
指针——>数据变量,通过解引用实现
4.指针算术运算
指针加法运算需要调整指针,调整的权重就是指针本身去掉一个*号再求sizeof(),例如
知 int *p;
求 P+1;//加4个字节(因为sizeof(int)=4);
知 double *p;
求 P+1;//加8个字节,(因为sizeof(double)=8);
下面通过一个程序进行分析:
int main()
{
int*p = (int *)10000;
printf("%d\n",p+1);//10004
printf("%d\n",p+4);//10016
printf("%d\n",(char*)p+4);//10004
printf("%d\n",(short*)p+4);//10008
printf("%d\n",(double*)p+4);//10032
printf("%d\n",(unsigned long long)p+1);//10001
printf("%d\n",(int***)p+1);//10004
return0;
}