四、指针变量的运算
指针变量可参与3种运算:赋值运算、算术运算和关系运算
赋值运算:
float c, *p, *q;
p=&c;
q=p;
int i ,*p;
i=3; p=&i;
*p++与*++p:引用下一元素的值
*p++çè*(p++)
*++pçè*(++p)
char i ,*p;
p=&i;
printf("%d",p);
p=p+2;
printf("%d",p);
一个指针变量的值加上一个整数n,则为一个新的地址,地址值为原值+整数*类型字节数。指向其后的第n个数据。
q-p=?
若是:int *p,*q; 则为
1
若是:char *p,*q;则为
2
一个指针变量的值减去另一个指针 变量的值为两个地址间的数据个数
指针的关系运算:
指针的关系运算即比较指针(地址)大小的运算。
其含义如下:
if(p<q) printf ("p在内存中q的低端。" );
if(p==q) printf ("p与q指向同一存储单元。" );
if(p==‘’)printf ("p指向NULL。" );
p=NULL(给指针变量赋空值)
五、 指针变量的初始化
#include <stdio.h>
void main( )
{
int *p, *q, a;
p=&a; q=p;
*p=3;
(*q)--;
}
六、指针作为函数的参数 可以加下群466572167(群内有各种项目学习资料)
读下列程序,写出运行结果
void swap(int p, int q)
{ int t;
t=p; p=q; q=t;
}
main( )
{int a=3,b=4;
swap(a, b);
printf("%d,%d",a,b);
}
运行结果:3,4
想一想:
普通变量做实参时,在被调函数中对形参的修改不会影响实参值。如何真正通过被调函数改变实参变量的值?
(1)全局变量
(2)数组做形参
(3)指针变量做形参
例:
void swap(int *p, int *q)
{ int t;
t=*p;*p=*q;*q=t;
}
main( )
{ int a=3,b=4;
swap(&a,&b);
printf("%d,%d",a,b);
}
运行结果:4,3
结论:利用指针变量做函数参数,可以得到多个变化的值, 而非一个函数值。
1、指针变量做形参时,对应实参为数据类型与该指针变量基类型相同的变量的地址
2、指针变量做形参时,参数传递的形式仍为单向值传递
3、在函数调用过程中,通过对实参变量的间接访问,改变了对应实参的值。
swap(int *p,int *q)
{int *t;
t=p;p=q;q=t;
}
main( )
{ int a=3,b=4;
swap(&a,&b);
printf("%d,%d",a,b);
}