指针思维导图
**
基本类型指针
**
代码1
#include <stdio.h>
//不能改变a,b的值
void swap_1(int a,int b)
{
int t=a;a=b;b=t;
}
//直接报错 这是地址的交换
void swap_2(int *p,int *q)
{
int *t;
t=p;
p=q;
q=t;
}
//可交换a,b的值
void swap_3(int *p,int *q)
{
int t;
t=*p;
*p=*q;
*q=t;
}
int main()
{
int a=3,b=5;
swap_1(a,b);
swap_2(&a,&b);
swap_3(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
代码2
#include <stdio.h>
//通过被调函数修改主调函数的值
//使函数返回一个以上的值
void g(int *p,int *q)
{
*p=7;
*q=10;
}
int main()
{
int a=3,b=5;
g(&a,&b);
printf("%d %d",a,b);
}
**
数组指针
**
代码3
#include <stdio.h>
//快速传输数据
void g(int *p,int len)
{
for(int i=0;i<len;i++)
*(p+i)= *(p+i) + 6; //*(p+i)= p[i] == a[i] == *(a+i)
}
int main()
{
int a[6]={1,2,3,6,4,5};
g(a,6);
printf("%d",a[4]);
}
代码4
#include <stdio.h>
//指针变量相减
int main()
{
int a[5]={1,3,4,4,5};
int *p=&a[0],*q=&a[3];
printf("%d",q-p); //相隔多少个单元格
}