龙空技术网

C语言快速入门手册9.指针数组与多维数组

铖邑IT 311

前言:

现时同学们对“c语言多重指针的作用”都比较着重,同学们都想要分析一些“c语言多重指针的作用”的相关文章。那么小编同时在网上汇集了一些关于“c语言多重指针的作用””的相关内容,希望小伙伴们能喜欢,朋友们快快来了解一下吧!

9.1.指针数组

示例代码如下。

这里定义了一个字符指针数组,并且用英文词典前面的一些单词来初始化。指针数组可以简单地理解为字符串数组,所以操作的时候跟普通数组类似。下面的代码将对比这些单词的长度,找出最长的那个单词。

我们在for循环中逐个地比较单词长度,同时每4个单词作为一行输出。编译运行程序。

程序运行结果也正如预期的那样。

9.2.指针的指针

C语言允许指针的嵌套,即指向指针变量的指针。实际上允许多重嵌套,但一般没有多少应用场景,常用的就是指向指针的指针。我们将之前的一个例子再做一些修改。

这次程序交换的是指针的值,而不是变量的值,由于交换是在swap函数里面完成,这时候就需要传递指针的指针。编译运行程序。

对比上下两次输出结果可以看出,变量的值并没有交换,但是指针所指向的变量值却发生了交换,再结合上下的指针值可以发现,ptr1、ptr2的值发生了交换。所以这种情况下也是可以起到交换的效果,所不同的是交换的是地址而不是值。

C语言中指针的指针用处还是很大的,在以后的实践中会经常使用,所以要掌握这种技巧。后续也会有这方面的例子。

9.3.多维数组

比较常见的就是二维数组,但实际使用中也不如指针数组常用。前面那个字典指针数组的例子可以改成二维数组,下面给出前面部分代码,后面部分代码不需要修改。

运行结果也是一样的。

通过下面的程序,我们来对比一下指针数组与二维数组的差异。

程序定义了字符指针数组与二维字符数组,初始化成相同的字符串列表,然后比对它们在空间分配上面有什么区别。代码中的注释写得很明白,指针数组在空间上是紧凑的,前后字符串用'\0'间隔;二位数组长度是固定的,所以如果在'\0'之后还有空间,那么就填充无效字符。初学者可以修改这个程序,让它输出字符的ASCII码,做一个比较。

编译运行程序的结果也正如预期那样。

同时也可以看出,二维数组中的第二维是连续空间,但第一维相邻元素的地址是均匀间隔的;多维数组也是类似的,最右边的那个维是连续的,其它维的地址也是均匀间隔的。

有时候我们希望将二维数组通过函数参数传递过去,这时候可以采用指定第二维长度的二维数组方式来传递。

上面程序定义了一个函数,用来统计第二维第2~6个整型元素总和,存到第1个元素。main函数和编译运行结果如下。

这个程序比较简单,这里主要强调一点,像fun函数这样的原型,在实践中不具备可用性。因为一般我们定义函数,是希望有一些用户来调用的,但这似乎明确指定了第二维的长度,限制了这个函数的通用性。实际上二维乃至多维数组本身就不是很实用,在以后的编程实践中将会体会到这一点。那如果我们想要改进这样的函数应该怎么办呢?这需要涉及到一些数据结构的知识,所以暂时只能先说明到这里了。

9.4.命令行参数

一些初学者应该也留意到了,经常我们打命令的时候,需要输入参数,比如我们经常用的clang命令,就需要参数。那么我们在程序中是如何得到这些参数的值呢?请看下面程序。

这个程序比较简单,参数argc指的是命令行参数的个数,参数argv是一个字符串数组,里面是所有的命令。需要注意到一点,第一个参数是命令本身,包括完整的路径。有时候只需要argc参数,可以采用下面这样的写法。

这两种写法中,一般写成指针数组可读性要更好一点,所以基本都是写成后者的形式。

标签: #c语言多重指针的作用