目录
一,指针
就是保存地址的变量 。
表示:int* p = &i;
*
访问地址上的变量*
*是一个单目运算符,用来访问指针的值所表示的地址上的变量
&
取地址
&与*互相反作用
二,指针的使用
1,交换两个变量的值
#include <stdio.h>
void swap(int *pa,int *pb);
int main()
{
int a=5;
int b=6;
swap(&a,&b);
printf("a=%d ,b=%d\n",a,b);
return 0;
}
void swap(int *pa,int *pb)
{
int t= *pa;
*pa=*pb;
*pb=t;
}
我们可以发现两个量的值交换了;这种情况只能运用指针,因为主函数与定义函数即使是参数字母一样,但是他们的含义不一样,主函数是将值传递给swap函数,函数也只改变了值,但是地址是不变的,所以不能交换。
但是指针可以改变地址故可以交换。
2.函数返回多个值
#include <stdio.h>
void minmax(int a[],int len,int *min,int *max);
int main()
{
int a[]={2,4,5,67,8,6,5,8,7,5,34};
int min,max;
minmax(a,sizeof(a)/sizeof(a[0]),&min,&max);
printf("min=%d,max=%d\n",min,max);
return 0;
}
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];
}
}
}
3,传入函数的数组其实是指针
此时a[ 0]=*p;
4,对指针加法
对指针加一意味着在这个位置上面加一个的单元与它的数字类型有关
例如 char 的指针加一则加一个字节;而int 的指针加一则加四个字节。(sizeof的基础类型)
5,两个指针相减
所得的结果不是两个指针的差是他们的差除以sizeof的类型。
意味着这两个指针之间能放几个这种类型的东西。
注意:指针不可以做乘除。
6,指针的类型
- 无论指向什么类型,所有的指针的大小都是一样的,因为都是地址,
- 但是指向不同类型的指针是不能直接互相赋值的
- 这是为了避免用错指针