首页 > 代码库 > C语言指针

C语言指针

变量的 直接访问 方式

     按变量的地址(变量名/变量的外号) 存取变量的值

image

变量的 间接访问 方式

     将变量的地址放在另一个内存单元中,先到另一个内存单元中取得变量的地址,再由变量的地址找到变量并进行数据存取

 

image 

image

变量Pointer是一个指针变量(本身是一个变量),它存储的是另一个变量的内存地址(i的内存地址),我们说pointer指向i

一个变量存储了另一个变量的内存地址,我们说它指向i(另一个变量)

什么是指针

指针的概念:一个变量的地址称为该变量的指针

指针变量:专门用于存储其它变量地址的变量

指针与指针变量的区别,就是变量值与变量的区别

image

指针变量的三要素

  • 指针变量的类型 :和其所指变量的类型一致
  • 指针变量的值:另一个变量在内存的地址
  • 指针变量的名字:起法同普通变量

指针变量的赋值:

float *p1=p1的地址

方式一:指针变量名 =&变量名; &->取地址符

方式二:通过另一个指针变量赋值

int i ,*p1,*p2; //声明一个变量i,指针p1和指针p2

赋值方式一:p1=&i

赋值方式二:p2=p1

image

指针的运算

1、算术运算

例如:int *p,i;

char *q,c;

p=&i;

q=&c;

内存地址示意义如下:

image

int 型占据 2个字节,char型占据1个字节

求: p++ ,q++

p++ 即 i的地址移1位(2个字节)

image

q++,即c的地址移动1位(1个字节)

image

2、比较运算

数组的名称就是一个指针

image

3、两个运算符

*:求其后内存地址中的内容

&:求变量的内存地址

image 

image

pointer_1指向a,pointer_2指向b

-----------------------  分割线 ---------------------

image

练习

问:若已执行了 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++