C语言笔记10(指针一)
变量地址:系统分配给变量的内存单位的起始地址
变量的存取方法:直接寻址和间接寻址
指针变量的定义方法
指针变量定义的一般形式:
类型标识符 *标识符
作用:定义变量为指针类型,使之专门用于存放变量的地址。
“*”用于定义指针变量,但指针变量名不包括 它
如:int *p;
float *q;
定义的指针变量为p,q,并不是*p,
*q
一个指针变量只能指向同一类型的变量。
如:p只能用于指向整型变量
q只能用于指向实型变量
无论指针变量指向何种类型,指针变量本身都是整型的,指针变量本身也有自己的地址,占四个字节的存储空间。
取地址运算的一般形式:
&变量
为指针变量赋初值
指针变量使用前必须有值
指针变量的初值必须是地址值
1)在定义指针变量时同时初始化
int a,*p; p=&a;
NULL是在stdio.h中定义的符号常数
#difine NULL 0
可以为指针赋空值(NULL),此时指针不指向任何变量,如:p=NULL;(p为空指针变量),
指针与一维数组
数组中的每个·元素都可以通过下标唯一确定,即通过下标可以访问(操作)数组中的元素。
在C语言中,凡是可以通过数组下标方式完成的访问(操作)均可以通过指针方式实现。
C语言规定:数组名就是数组的首地址常量,即
int a[10];
a==&a[0]
C语言系统内部处理机制,指针方式效率高,但不直观。
访问数组的两种方式
下标方式
int a[10],*p;
p=q;(等价于p&a[0];)
使p指向a数组的第一元素啊[0];
a[i],*(a+i),p[i],
*(p+i)等价。
指针方式
通过指向数组元素的指针变量访问所需元素。
int a[10],*p=&a[0];
p++;
指针表达式与整数的加减运算
一般形式
p+n或p-n
其中:p是任意一个指针表达式,n是任何一种整型表达式。
计算规则
表达式p+n的值=p的值+p所指类型长度*n
表达式p-n的值=p的值-p所指类型长度*n
说明:只有当p和p+n或p-n都指向连续存放的同类型数据区域(数组)时,指针加、减才有实际意义。
C语言规定:表达式p+n和p-n的类型与p相同。
数组名是指针常量,不能改变常量的值,a++;a+=2;a=p;都是非法的。指针p是变量,若p指向数组的首地址,p+1代表该类型的下一变量的地址。
假定指针p和q指向同一个数组,则:
语法:指针表达式 关系运算符 指针表达式
(1)==和!=运算符,比较两个指针表达式是否指向同一个内存单元;
(2)<、<=、>、>=,比较两个指针所指向内存区域的先后次序。
p>q: p指针所指元素位于q所指元素之后时为1,反之为0。
p>=q: p指针所指元素位于q所指元素之后(或两指针指向同一元素)时为1,反之为0.
p==q:两指针指向同一元素时为1,反之为0.
p!=q:两指针不指向同一元素时为1,反之为0.
同类指针相减
语法:p-q
说明:
(1)同类指针相减时,两个指针应该指向连续存放的同类数据区域。
(2)p-q的值,等于(p的值-q的值)/所指类型长度,即p,q两个指针之间数据元素的个数。
强制类型转换运算
格式:
(类型名*)指针表达式
功能:
将指针表达式的值转换成指定类型的指针。