目录
为什么说指针是c语言的绝学呢?为什么说看一个人c语言的功底,直接看指针学的咋样就行了呢?因为利用指针变量可以表示各种数据结构,能广泛运用数组和字符串,能动态分配内存等。如果我们能很好的理解并运用指针,那么说明你的c语言学得比较nice。
指针的概念,定义,与引用
最直白的说,指针就是地址,也就是内存地址,你可以把你家当作一个地址,而你就是这个地址里面的变量。那么,接下来先搞清楚2个符号。‘*’是取内容符号,作用是取某个地址中的内容;‘&’是取地址符号,作用是取某个变量的地址。通过变量名来引用变量的内存单元值叫做直接引用,而通过内存地址引用内存单元值叫做间接引用。比如我们想要找到小明,小明加住3单元201。我们可以直接叫小明的名字(直接引用),另一种则是叫3单元201的住户(间接引用)。这两种方法都可以实现找到小明的目的。
指针变量的定义形式:
[存储类型] 数据类型符 *变量名;
比如;
int *p; //定义一个指针变量p,p的值是某个整型变量的地址
int *p1,*p2; //同时定义了两个指向整型变量的指针变量p1,p2
float a,*p; //定义一个普通变量和一个指向浮点型变量的指针变量p
指针变量跟普通变量一样,使用之前要定义说明,且必须赋予具体的值,未经赋值的指针变量不能使用。
指针变量的赋值有2种形式,都是将a的地址赋值给指针变量p。
int a;
int *p=&a;
int a;
int *p;
p=&a;
指针变量的引用:
* 指针变量
在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。
在表达式中出现的“*”是一个运算符用以表示指针变量所指的变量,也就是前面所说的取内容。
int a;
int *p=&a; //p指向a
*p=10; //相当于a=10
p指向整型变量a,而*p就是a,p就是a的地址,*p是a的间接引用。
指针和地址运算
1:指针变量的加减运算
指针就是地址,而地址是一种无符号的整数,但指针不能进行乘除法运算,因为运算结果没有意义。指针的加减运算是以sizeof为单位进行相加减
#include <stdio.h>
int main()
{
short *pi;
char *pc;
long *pl;
pi=(short * )1000;
pc=(char * )1000;
pl=(long * )1000;
pi++;
pc--;
pl-=2;
printf("%d %d %d",pi,pc,pl);//pi的值为1002,pc的值为999,pl的值为996
return 0;
}
2:指针变量的关系运算
两个指针变量进行关系运算表示为它们所指向的内存单元之间的关系,比如p1和p2都是指针变量
p1==p2; //p1和p2指向同一内存单元
p1>p2; //p1处于高地址位置
p1<p2; //p2处于高地址位置