C语⾔指针的运算
C语⾔指针的运算
指针变量可以进⾏某些运算,指针的运算本⾝就是地址运算,。可以通过将指针加减⼀个整数,或者通过对指针赋值来移动指针。如p+n,p-n,p++,p–,++p和–p等。
指针变量的运算
赋值运算
指针变量的赋值运算有以下⼏种形式。
1.把⼀个变量的地址赋予指向相同数据类型的指针变量
int a,*pa;
pa=&a;//把整型变量a的地址赋给指针变量pa
c语言指针实验总结2.把⼀个指针变量的值赋予指向相同数据类型的另⼀个指针变量
int a,*pa=&a,*pb;
pb=pa;//把a的地址赋予指针变量pb
3.把数组的⾸地址赋予指向数组的指针变量
int a[4],*pb;
pb=a;//数组名表⽰数组的⾸地址,故可赋予指向数组的指针变量pb
也可写为:
pb=&a[0];//数组第⼀个元素的地址也是整个数组的⾸地址,
4.把字符串的⾸地址赋予指向字符类型的指针变量。例如:
char*pc;
pc="xianyu";
/*或⽤初始化赋值的⽅法写为:*/
char*pc="xianyu";
这⾥并不是把整个字符串装⼊指针变量, ⽽是把存放该字符串的字符数组的⾸地址装⼊指针变量。
5.把函数的⼊⼝地址赋予指向函数的指针变量。
int(*pf)();pf=fun;//fun为函数名
加减算术运算
数组指针变量向前或向后移 动⼀个位置和地址加1或减1 在概念上是不同的。因为数组可以有不同的类型, 各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1 个位置表⽰指针变量指向下⼀个数据元素的⾸地址。⽽不是在原地址基础上加1。
int a[5],*pa;
pa=a;//pa指向数组a,也是指向a[0]
pa=pa+2;//pa指向a[2],即pa的值为&pa[2]
指针变量的加减运算只能对数组指针变量进⾏, 对指向其它类型变量的指针变量作加减运算是毫⽆意义的。
两个指针变量之间的运算
指向同⼀数组的两个指针变量之间才能进⾏运算, 否则运算毫⽆意义。
1.两指针变量相减
两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地 址) 相减之差再除以该数组元素的长度(字节数)。
2.两指针变量进⾏关系运算
指向同⼀数组的两指针变量进⾏关系运算可表⽰它们所指数组元素之间的关系。例如:
pf1==pf2表⽰pf1和pf2指向同⼀数组元素
pf1>pf2表⽰pf1处于⾼地址位置
pf1<pf2表⽰pf2处于低地址位置
指针可以与0⽐较(NULL 空指针)
指针变量⾃⾝的运算
main(void){
int a=1,b=10;
int*p1,*p2;
p1=&a;
p2=&b;
printf("p1的地址是%d,p1的存储值是%d\n",p1,*p1);//输出
printf("p2的地址是%d,p2的存储值是%d\n",p2,*p2);//输出
printf("p1-1的地址存储的值%d\n",*(p1-1));//地址-1后存的值
printf("p1-1的地址中的值-1后的值是%d\n",*p1-1);//值-1后的值
printf("*(p-1)的值和*p-1的值不同\n");
return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论