指针(变量的储存地址)在C语言的函数中有重要的应用,有必要对指针有更清晰的认知。
下面给一个将两个数升序排列的小例子来说明指针的基本理解。(思路均有注释,可参考)
假设要排序的变量名字为a,b。 很多人理解 int *p 认为*p是一个整体,实际上这里应该分开读:int * p,p是一个int类型的指针变量。而*p 是一个int变量。对此项的理解关系到对指针的认识。如下例子中,可关注两点:
1.为什么在sort函数中运行swap函数没有传入带*的变量。
2. a,b传入局部函数是如何可以被彻底互换的。(实际上指针的一个重要作用就是在全局修改变量)
#include <stdio.h>
// 排序a,b两个数
// 定义一个函数
void swap(int *q, int *p)
{
// 给一个中间变量当做储存媒介
int temp = *q; // 存下q的值
*q = *p;
*p = temp;
}
void sort(int *x, int *y)
{
// 传入a,b的地址。排序a,b
if (*x > *y)
{
// 这里需要一个互换函数,因此我们在前面定义一个
swap(x, y); // 注意这里传入的是地址
}
}
// 这里定义一个互换函数
int main()
{
int a = 5;
int b = 2;
sort(&a, &b);
printf("大的数是 %d\n", b);
printf("小的数是 %d\n", a);
return 0;
}