C语言的那些小秘密之指针(四)语言的那些小秘密之指针(四)
本文主要讲解了C语言中指针的用法。
懂得C语言的人都知道,C语言之所以强大,以及其自由性,绝大部分体现在其灵活的指针运用上。因此,说指针是c语言的灵
魂,一点都不为过。所以从我的标题加了个(一)也可以看出指针的重要性,我尽可能的向大家交代清楚我对于指针的理解。所
以在讲解的过程中我尽可能的用代码加文字的描述方式,通过代码的分析来加深我们对于指针的理解,我给出的都是完整的代
码,所以读者可以在看的过程中直接copy下去即可运行,希望下面的讲解能够对你有所帮助。
先让我们来看看一段非常熟悉的代码:
#include
void main(int argc,char *argv[])
{
while(argc-->1)
printf("%s ",*++argv);
}
运行结果如下:
可能还是有人不是很了解main函数里的参数argc和argv是什么意思,在此做一简单的讲解,argc为命令行输入的参数个数,在
此argc=3,有三个参数,分别是:fdsa.exe fdsa asdf,argv是一个指针数组,在此相当于char *argv[0]="fdsa.exe"、char
*argv[1]="fdsa"、char *argv[0]="asdf"。有了上面的解释相信能够很好的理解main函数的参数了。
现在来分析下上面的代码,程序中有一句argv++;但是我们上面的分析是argv是一个数组名,而数组名是不能进行这样的++运
算的,难道出错了嘛?!但是明明运行结果已经就在眼前了,在解释之前我们再来看如下一段代码:
#include
void main()
{
char *argv[]={"this","is","shuzu"};
*++argv;
}
编译发现出错了。
好了现在我们可以来解释为什么会出现如上两种情况了,有种特殊情况就是数组名作为函数参数,传递的是数组的首地址,系
统会把形参当作变量来处理,所以如果我们吧main函数改写为main(int argc,char **argv);就好理解多了。
看了上面的代码,接下来我们看看指针数组和数组指针的区别所在。
一、指针数组指的是一个数组,数组中的每个元素都是指针类型,所有的指针都指向不同的地址,所指的地址的数据也不一定
一样,但是所指的数据类型必须一样。
二、数组指针指的是定义的是一个指针,而指针指向的是数组,指针指向数组首单元的地址,对于数组内部元素的属性不了
解,仅仅是规定了数组首单元的地址,通过它可以找到整个数组。
接下来看看一段代码:
#include
void main()