C语言多级指针举例



多级指针举例


可能很多同学都执行过这个命令,ping www.baidu.com或者是ping www.qq.com,ping是一个命令,后面的网址就是它的传入参数。不同的参数会导致不同的运行结果。


下面就是我们main函数的标准写法,argc就是传入参数的个数,argv是一个字符串类型的二维指针。当我们需要传递下面四个字符串给main函数的时候,这四个是字符串的首地址不是连续的,我们就可以使用二维指针将它们的首地址存储在连续的空间中。这样我们就可以通过指针变量标签访问的方法访问到这几个字符串。


91.png


92.png


测试代码如下


我们使用for循环来遍历所有的参数,并使用指针的标签访问它的所有参数,这里的标签地址是连续的,尽管字符串存储的地址是不相关的,但是通过二维指针,它们的首地址构成了一个线性的关系。


93.png


运行结果如下


可以看到我们为main函数传入的参数不同,但是通过指针的标签访问方式来看,存储这些字符串的首地址的指针空间是连续的。当编译器接收到四个参数,先找出四个地址存储这些字符串,然后找到四个连续的地址依次存储它们的首地址,最后将四个连续地址的首地址赋给argv。


94.png



95.png  


如果我们不知道参数的个数,不使用argc这个参数,我们怎么遍历所有的字符串参数呐?


测试代码如下


我们前面已经提到过NULL是一个结束的标志,所以这里我们知道的是参数的首地址argv[0],却不知道它的结束在哪,我们不能一直通过循环读取,那样会造成指针越界的错误,所以使用NULL判断结束。如果你以后看到二维指针,就很有可能看到这个while循环的模板,因为这是一个操作二维指针很常用的例子。


96.png


运行结果如下


可以看到通过不知道参数个数的方法,我们也对它的所有参数进行遍历输出了。这里的递增是连续地址的地址的递增。


97.png


对于二维指针,它实际上是一张地址表,这个地址表是无穷大的,通过编译器定义的NULL,我们知道了这个二维指针结束的标志。在我们的实际开发中,我们最多能用到二维指针,三维指针都使用不到了。二维指针已经能够很好的表达我们的逻辑,别的程序员也能够看懂我们对这个问题的解决方案是怎样的。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

您有一个400抵2000现金红包未使用!

客服热线 400-862-8862

回到顶部