初识指针
在大部分人眼中C语言,指针便是难以跨越的难关之一,有许多学习C语言的萌新在学习完指针之后便放弃了,我们今天就来和指针较量一番!!!
本人认为学不好指针的两大问题:
1.没有理解指针
2.学习了但不知道有什么用
现在我们先来看看第一个问题
1.没有理解指针
*刚学习到指针都会是云里雾里的,因为刚接触到一个新的名词都是一脸蒙bi的状态
指针通俗来讲就是用来储存地址,定义时用*来声明指针,例如 : int p; //定义一个指针变量p
我们还要学习一些新的符号。
1.取地址符&
使用方法:&变量名
&a:获取a的地址
2.间接访问符,解引用
*p (注意与定义指针时的含义不同),访问储存的地址的值
我们先用一段代码来看看指针
#include <stdio.h>
int main()
{
int a,b;
a = 10;
b = 20;
int *p;
p = &a;
*p = 100;
p = &b;
*p = 200;
printf("a = %d,b = %d\n",a,b);
return 0;
}
从上述代码看来我们定义两个整型变量a,b分别赋值为10,20,又定义了一个指针p,将a的地址赋值给指针p,又解引用将100赋值给a变量,然后将b的地址赋值给指针p,又解引用将200赋值给b变量,最后输出a,b的值
最后的值应该为a = 100,b = 200
现在我们显而易见,不难得到:指针可以通过解引用来修改指针储存的该地址的变量的值。(important!!!)
看到这里估计指针已经明白了,但就会有另一个问题,也就是我上面说到的第二个问题,学了有什么用。
2.学习了但不知道有什么用
学完指针估计好多人都会想为啥不直接给a,b重新赋值,反而用指针,感觉很麻烦
我们继续用代码说话
#include <stdio.h>
void Swap(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
int main()
{
int a,b;
a = 10;
b = 20;
printf("%d,%d\n",a,b);
Swap(a,b);
printf("%d,%d\n",a,b);
return 0;
}
这个程序是实现让两个数字交换,大家可以试着运行一下,看看是不是可以交换成功
这个表面看着好像是没有问题但并不能交换成功,那问题是出在乐哪?
其实在函数传入给了两个形参即Swap里的a,b只是与主函数a,b重名而已,地址完全不同,导致将Swap中的a,b交换了,但最后打印的却是main函数的a,b,所以并不能交换成功。
那我们应该怎样用外面的函数来修改main函数里的值呢
没错就是利用了指针,我们不是说指针可以通过解引用来修改指针储存的该地址的变量的值
让我们用代码来看看
#include <stdio.h>
void Swap(int *p,int *q)
{
int tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
int main()
{
int a,b;
a = 10;
b = 20;
printf("%d,%d\n",a,b);
Swap(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}
这段代码与上面的代码差别就在于Swap使用了指针,但却可以用被调用函数来修改main里变量的值
我们来分析一下这个代码,将两个变量的地址存入Swap函数的两个指针,再用指针的解引用来修改main中变量的值,我在这里只能说一句妙啊