void swap1(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
void swap2(int *p1,int *p2)
{
int * temp;
temp=p1;
p1=p2;
p2=temp;
}
int a=3,b=4;
int *p1=&a;
int *p2=&b;
swap1(p1, p2);
NSLog(@"%d %d",a,b);
打印结果:
4 3
swap2(p1, p2);
NSLog(@"%d %d",a,b);
打印结果:
3 4
结论:C语言中实参变量与形参变量之间的数据传递是单向的值传递.用指针变量做函数参数时同样要遵循这一规则.不可能通过执行调用函数来改变实参变量指针的值,但是可以改变实参变量所知变量的值.
*****************************************************************************************************************
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
a[0]等价于 *(a+0)
a[1]等价于 *(a+1)
a[2]等价于 *(a+2)
*(a[0])是1
*(a[0]+1)是2
*(a[0]+2)是3
a[1]=*(a+1)
int (*p)[4];//这个是指向数组的指针如果是 int *p[4]这个就是一个指针数组
p=a;
*****************************************************************
// 指针的指针指向函数的指针
指针的指针比较好理解如下:
char **p;
对于指向函数的指针以及用该指针调用函数如下:
int max(int x,int y)
{
if (x>y) {
return x;
}
return y;
}
int max(int x,int y);// 声明
int (*p)(int,int);// 第一个int 代表函数返回值 ,后两个代表参数
p=max;
int z=(*p)(4,5);//使用指针调用函数
printf("%d",z);