指针作为c语言中的一个重要概念,它能有效的表示与处理复杂的数据结构,使程序更加简洁高效,也被称为“c的灵魂”,但它的用法灵活,是一个容易混淆的概念。作为一名初学者,在此分享我对指针的看法以及一些使用。
指针变量的基本概念理解就是:保存&得到的地址的变量。
如int* p=&i;
这里的* 表一个指针,将i的地址给了p,此时可以说p指向了i
再来看作为参数的指针的使用
void f(int*p);
int main()
{
int i=6;
printf("%p\n",&i);
f(&i);
return 0;
}
void f(int*p)
{
printf("%p\n",p);
printf("%d\n",*p);
}
此时函数在调用时获得了某个变量的地址
p的输出为i的地址址,而* p的输出为i变量本身得的值
对于指针的使用还有以下几种例子
1,交换两变量的值
void f(int *pa,int *pb);
int main()
{
int a=5;
int b=6;
f(&a,&b);
return 0;
}
void f(int *pa,int *pb)
{
int t=*pa;
*pa=*pb;
*pb=t;
printf("a=%d,b=%d",*pa,*pb);
}
结果a=6,b=5, 这样我们就用指针完成了两个变量的交换
2,让函数返回多个值
在函数中,使用return只会获得一个返回值,而指针是一种方法,可以让我们获得多个返回值
例如下面找一个数组的最大与最小值的代码
void f(int a[],int n,int *min,int *max);
int main()
{
int a[]={1,2,3,4,5};
int min,max;
f(a,sizeof(a)/sizeof(a[0]),&min,&max);
printf("min=%d,max=%d\n",min,max);
return 0;
}
void f(int a[],int n,int *min, int *max)
{
int i;
*min=*max=a[0];
for(i=1;i<n;i++)
{
if(a[i]<*min){
*min=a[i] ;
}
if(a[i]>*max){
*max=a[i];
}
}
}
在函数中,我们要的值为* min与* max,此时运用指针可以帮我们做到这件事
3.通过指针来规避错误
有时计算中出现了可能导致结果出错的一些特殊状态,可以通过指针来让函数返回值(如-1,0)来表出错,这样我们就可避免error
int f(int a,int b,int *r);
int main()
{
int a=5;
int b=0;
int c;
if(f(a,b,&c)){
printf("%d/%d=%d\n",a,b,c);
}else{
printf("错误");
}
return 0;
}
int f(int a,int b,int *r)
{
int ret=1;
if(b==0) ret=0;
else *r=a/b;
return ret;
}
由于分母b为0,此程序输出“错误”
希望以上内容能为同我这样的指针初学者带来一些帮助,感谢浏览!