关于指针的部分概念
*是地址取值运算符;
&是地址运运算符;
int a=5;
int *pri=a; //指针变量
&pri //指针本身的内存地址
&a //变量的内存地址
pri //*pri的内容,即是a有内存地址
*pri //指的是a的值
*(&pri) //将地址内存所存放的值取出,实际同pri的内容相同
指针的加减运算:
一、指针的加法运算是把指针的内容按数据类型的长度进行加法运算。
例如:
int a=5;
int *pri=a;
pri++;
那通过查内存来看到进行加法运算后的存放在指针里的地址产生变化,地址长度加了一个数据类型的长度。
二、指针的减法运算是计算两个指针的相差的数据个数。
例如:
int a,sub;
int *ptr1,*ptr2;
ptr1=&a;
ptr2=⊂
sub=ptr1-ptr2;
sub的结果就是一个整数值,指的是两个地址相差数据类型的个数。
指针与函数
函数有返回值,但它只能返回一个数据类型的值,但有时,我们要进行一些运算,要返多个数值是,那用指针就可以实现这个效果了。
例如:计算两数相加、相减的结果(C版)
void list_ptr(int *,int *),func(int *,int *);
int main(void)
{
int a =20,b=15,*ptr1,*ptr2;
ptr1=&a;
ptr2=&b;
list_ptr(ptr1,ptr2);
printf("after process....\n");
func(ptr1,ptr2);
list_ptr(ptr1,ptr2);
return 0;
}
void list_ptr(int *ptr1,int *ptr2)
{
printf("*ptr1=%d,prt1=%d\n",*ptr1,ptr1);
printf("*ptr2=%d,prt2=%d\n",*ptr2,ptr2);
}
void func(iint *ptra,int *ptrb)
{
int i=*ptrb;
*ptrb=*ptra+*ptrb;
*ptra=*ptra-i;
return ;
}
例如:对A和B进行数值交换
void swap(int *,int *);
swab(&a,&b);//在main函数里调用下面的函数,传递两个值的地址
void swab(int *x,int *y)
{
int temp=*x;
*x=*y;
*y=temp;
return;
}