学习前景
还记得在大一刚来不久在学C语言的时候,就讲了如何通过指针在函数内交换两个数的值并在主函数中也能实现交换,但是当时是属于半懵半懂的状态,今天来好好把这个经典的指针问题捋一捋
- 旧知识新学了属于是√
学习内容:
首先我们来看这个代码是怎么写的
#include <stdio.h>
void swap(int *a,int *b);
int main()
{
int x = 3,y = 5;
printf("before sawp(): x = %d,y = %d\n",x,y);
swap(&x,&y);
printf("after swap(): x = %d,y = %d\n",x,y);
return 0;
}
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
运行结果:
学习须知:
宝贵经验&&学前理解:
- 我们如果想在函数(这里指非主函数)内改变主函数的变量的值的话,我们在函数传参的时候就需要传递变量的地址,如果传递的是值的话,无论对值怎么操作,在操作的函数中都属于局部变量,在栈中,函数执行完毕之后这部分的内存就没了,主函数中变量的值是不会改变的。(我觉得这个很重要,虽然它是很基础的)
- 在讲解指针的时候,老师们或者网上都很喜欢说,某个指针指向了那个变量,这个说法是没有问题的,但是在使用多级指针的时候,这样的说法就很容易绕晕(主要是我…),所以在犯错中,得到了一个经验:首先指针也是变量,只是它与一般变量不同的在于,一般变量存储的是值,而指针变量存储的是地址,在感到混乱的时候,就画图看该指针变量中实际存储的值(也就是某个变量的地址)是什么。
加强理解:
现在慢慢的来画个图来理解一下这个过程
在说明上:之后再来完善,很多不确定的部分,可以通过打印地址来理解。