初学者对于指针的看法与使用

183 阅读2分钟

指针作为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,此程序输出“错误”

希望以上内容能为同我这样的指针初学者带来一些帮助,感谢浏览!