首页 > 代码库 > C语言指针
C语言指针
变量的 直接访问 方式
按变量的地址(变量名/变量的外号) 存取变量的值
变量的 间接访问 方式
将变量的地址放在另一个内存单元中,先到另一个内存单元中取得变量的地址,再由变量的地址找到变量并进行数据存取
变量Pointer是一个指针变量(本身是一个变量),它存储的是另一个变量的内存地址(i的内存地址),我们说pointer指向i
一个变量存储了另一个变量的内存地址,我们说它指向i(另一个变量)
什么是指针
指针的概念:一个变量的地址称为该变量的指针
指针变量:专门用于存储其它变量地址的变量
指针与指针变量的区别,就是变量值与变量的区别
指针变量的三要素
- 指针变量的类型 :和其所指变量的类型一致
- 指针变量的值:另一个变量在内存的地址
- 指针变量的名字:起法同普通变量
指针变量的赋值:
float *p1=p1的地址
方式一:指针变量名 =&变量名; &->取地址符
方式二:通过另一个指针变量赋值
int i ,*p1,*p2; //声明一个变量i,指针p1和指针p2
赋值方式一:p1=&i
赋值方式二:p2=p1
指针的运算
1、算术运算
例如:int *p,i;
char *q,c;
p=&i;
q=&c;
内存地址示意义如下:
int 型占据 2个字节,char型占据1个字节
求: p++ ,q++
p++ 即 i的地址移1位(2个字节)
q++,即c的地址移动1位(1个字节)
2、比较运算
数组的名称就是一个指针
3、两个运算符
*:求其后内存地址中的内容
&:求变量的内存地址
pointer_1指向a,pointer_2指向b
----------------------- 分割线 ---------------------
练习
问:若已执行了 pointer_1=&a,则:&*pointer_1的含义是什么?
答:pointer_1=&a ,这时pinter_1存储的是 a的地址,
*pinter_1 是取指针所指向的值,也即 a
所以 &*pinter_1 就是取 a的地址,相当于 &a
*取内容,&取地址,两者是互异的,互相抵消
问:*&a的含义是什么?
答:&a取的是地址,*地址取的是内容,所以*&a 就是a
问:(*pinter_1)++相当于什么?
答:*pointer_1 是取pointer_1所指向的值,所以这里相当于 a++