指针问题的总结
一级指针
-
一切变量都是房间号,一切变量都有地址,地址就是房间号。
-
指针就是地址,存放地址的变量就是指针变量。
-
*就是传送门,能够根据房间号传送对应的变量。
-
一切传值都是拷贝。
一级指针在程序中起到的最重要的作用就是传值,来看一下下面一个非常经典的学习指针时的程序:
#include <stdio.h>
void swap(int a, int b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int a, b;
printf("请输入:\n");
scanf("%d %d", &a, &b);
printf("函数执行前:\n");
printf("a=%d b=%d\n", a, b);
swap(a, b);
printf("swap函数执行后:\n");
printf("a=%d b=%d\n", a, b);
return 0;
}
运行结果如下:
我们可以看到,在函数执行之后,a与b的值并没有发生改变,这是因为一切的传值都只是拷贝,全局变量的值被拷贝给了局部变量,但全局变量的值本身并没有发生改变,我们再来看下一个程序:
#include <stdio.h>
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int main()
{
int a, b;
printf("请输入:\n");
scanf("%d %d", &a, &b);
printf("函数执行前:\n");
printf("a=%d b=%d\n", a, b);
swap(&a, &b);
printf("swap函数执行后:\n");
printf("a=%d b=%d\n", a, b);
return 0;
}
执行结果为:
在这个程序中,函数执行之后,a和b的值都改变了,这是因为在这个函数当中传递的是指针变量,把a和b的地址传递到了函数当中,函数通过取他们的地址,从而达到了改变他们的值的目的。
二级指针
在这个函数当中传递的是指针变量,把a和b的地址传递到了函数当中,函数通过取他们的地址,从而达到了改变他们的值的目的。
二级指针
二级指针存放的是一级指针的地址(二级指针指向的是比他低一级指针的地址)