目录
指针,是C语言中的一个重要概念,也是掌握C语言比较困难的部分。指针也就是内存地址,可对存储数据的变量地址进行操作,不同类型的指针变量所占用的存储单元长度是不相同的。下面主要讲述了指针运算符,指针变量及其定义,以及指针的使用。
一、指针运算符
1、&运算符
&运算符,是单目运算符,表示取地址,即获得地址的变量,它的操作数必须是变量。例如:int i; printf("%p",&i); 表示输出i的地址。
&可以取变量的地址、相邻变量的地址、数组的地址、数组单元的地址、相邻数组单元的地址,但不能对没有地址的东西取地址。
2、*运算符
*是一个单目运算符,用来访问指针的值所表示的地址上的变量,可以做右值也可以做左值(出现在赋值号左边的不是变量,而是表达式计算的结果,是一个特殊的值,称之为左值)。例如:int k=*p; *p=k+1。
指针运算符&和*互为反作用。
二、指针变量及其定义
1、指针变量
指针变量是存放内存地址的变量,不同于其他类型变量,它是专门用来存放地址的,也称为地址变量。在C语言中,指针通常指的是指针变量。
2、定义指针变量
定义指针变量的一般形式为:类型说明符 *变量名;其中类型说明符表示指针所指向变量的数据类型,* 表示这是一个指针变量,变量名表示定义的一个指针变量名,它的值是具有实际值的变量的地址。例如:int i;int *p=&i; 表示p是一个指针,它的值是变量i的地址,通常称为p指向i。
三、指针的使用
1、交换两个变量的值
void swap(int *pa,int *pb)
{
int t=*pa;
*pa=*pb;
*pb=t;
}
2、函数返回多个值,某些值就只能通过指针返回,传入的参数实际上是需要保存带回的结果的变量。如:求数组中的最大值与最小值,如下:
#include<stdio.h>
void minmax(int a[],int len,int *min,int *max);
int main()
{
int a[]={1,3,34,56,12,34,58,90,55};
int min,max;
minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
printf("min=%d,max=%d",min,max);
return 0;
}
void minmax(int a[],int len,int *min,int *max)
{
int i;
*min=*max=a[0];
for(i=0;i<len;i++)
{
if(a[i]<*min)
{
*min=a[i];
}
if(a[i]>*max)
{
*max=a[i];
}
}
}
3、函数返回运算的状态,结果通过指针返回。常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错(-1或0),但是当任何数值都是有效的可能结果是,就得分开返回了。
#include<stdio.h>
int divide(int a,int b,int *result);
int main()
{
int a=5,b=2,c;
if(divide(a,b,&c))
printf("%d/%d=%d\n",a,b,c);
return 0;
}
int divide(int a,int b,int *result)
{
int ret=1;
if(b==0)
ret=0;
else
*result=a/b;
return ret;
}