指针到底有什么用呢?他又要怎么用?这是指针初学者的疑问。
1.指针的使用
编写一个指针函数,用来进行值的交换。首先需要获取两个需要交换的值的地址,然后将地址给到指针,再通过指针来交换值。
#include<stdio.h>
void swap(int *pa,int *pb);//声明函数
int main()
{
int a = 0;
int b = 9;
printf("a的初始值为:%d\n",a);
printf("b的初始值为:%d\n",b);
swap(&a,&b);
printf("a交换之后的值为:%d\n",a);
printf("b交换之后的值为:%d\n",b);
}
void swap(int *pa,int *pb)
{
int t;//还是要定义一个变量,来存放交换的值
t = *pa;
*pa = *pb;
*pb = t;
}
a的初始值为:0
b的初始值为:9
a交换之后的值为:9
b交换之后的值为:0
这一段代码可以看到,在主函数main里面调用完swap(&a,&b)函数之后a和b的值就发生了交换。
很多人会说,为什么只是两个值之间的交换为什么要用到指针呢?既然都说了两个值,是不是我在函数中进行交换之后必须将两个变量的值都要返回?这里就涉及到函数返回多个值。
函数返回多个值,某些值就只能通过指针返回。在这里传入的参数实际上就是需要保存待会的结果的变量。
接下来再来看一段代码
#include<stdio.h>
void minmax(int a[],int len,int *min,int *max);
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//定义一个数组,遍历出数组的最大值和最小值
int min,max;
minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
printf("min=%d,max=%d",min,max);
}
void minmax(int a[],int len,int *min,int *max)
{ //用来遍历数组的函数指针,传进去四个参数,最后需要的结果为最大值和最小值
int i;
*min = *max = a[0];
for(i=1; i<len;i++)
{
if(a[i] < *min)//获取最小值
{
*min = a[i];
}
if(a[i] > *max)//获取最大值
{
*max = a[i];
}
}
}
min=1,max=16
可以看到这段程序需要返回的结果也有两个,一个最大值和一个最小值。如果是用return来返回值,值只能返回一个。由此可见,指针函数里面作为参数的作用就是将值结果传回来。
2.指针常见的错误
定义了指针变量,还没有指向任何变量,就开始使用指针。
#include<stdio.h>
int main()
{
int *p;
p = 12;
printf("p的地址:%d",*p);
}
:Segmentation fault
在 int *p;的时候指针的地址是随机的,不知道这个随机的地址是不是有被用,直接使用这一地址系统是会报错的。