到底什么是指针?
C语言中把专门存放变量地址的变量“指针变量”,简称指针。
什么这样说你不明白???
地址 | 内存单元 | 变量 |
---|---|---|
1000 | 20 | x |
1002 | 1 | y |
1004 | 115 | z |
– | – | – |
2000 | 1000 | p |
其中变量x的内存单元的地址为1000,而变量p的值是变量x的内存单元的地址所以称p为指针变量简称指针。
如何定义一个指针(指针变量)?
前边我们已经学过
变量的定义
类型名 变量名;例如:int a;double b;
那么怎么把指针变量和他们区别开呢?
这是我们就不得不提出指针声明符 *
,当定义变量时出现指针声明符,说明那个被定义的变量是指针
- 注意:指针声明符并不是指针的组成部分,即
int *p;
p
是指针变量而不是*p
指针变量的定义:
类型名 *指针变量名;
-
注意:类型名是指针所指向的变量的类型,
即int a; int *p;
-
跟普通变量一样,指针变量也必须先初始化再引用
指针变量的初始化又有那些注意要点?
- 把一个变量的地址作为初始化值赋值给指针变量时,该变量必须已经定义;
错误
int *p=a;
int a;
正确
int a;
int *p=&a
- 在定义或初始化时,变量名前面的
*
只表示该变量是指针变量,而不是间接访问符
int a=5;
int *p=&a;//初始化语句
*P=6;
第一个*
和第二个*
是不同的,第一个是指针说明符,第二个是间接运算符
- 不能用数值作为指针变量的初值
int *p=1000;错误
int *p=0; 正确//这里是把指针变量初始化为空指针,0是ASCII字符NULL得值;
上面提到了简介访问符,下面介绍一下指针的基本运算
指针的基本运算有哪些呢?
- 取地址运算
指针变量的值是一个地址,把它所指向的变量进行取地址运算就是指针的值 - 间接访问运算
*p
是把变量p的值作为地址访问其内存单元
int a=10;
int *P=&a;
此时*p
和a
的值都是10