如何使用Visual Studio 2010编写一个C语言程序,本经验将手把手教大家如何通过VS2010编写一个简单的C语言小程序......
2023-03-16 407 C语言
指针提供一种以符号形式使用地址的方法,因为它以更接近机器的方式表达,所以使用指针的程序更有效率。尤其是,指针能有效地处理数组。实际上,数组表示法其实是在变相地使用指针。在这篇经验中,我将以C语言为例展示指针访问数组元素的方法。
先从最基本的概念开始。
&是地址运算符。当它后面是一个变量名时,&给出该变量的地址。
*是间接或解引用运算符。当它后面是一个指针时,*给出储存在指针指向地址中的值。
数组名是数组首元素的地址。也就是说,如果 flizny 是一个数组,下面的语句成立:
flizny == &flizny[0];
另外,需要注意C语言运算符的优先级。间接运算符(*)的优先级高于 ,如果dates是个数组名,则* dates 2相当于( * dates) 2:
* (dates 2) // dates 第 3 个元素的值
* dates 2 // dates 第 1 个元素的值加 2
先以这段程序为例。注意指针加上一个数时,它的值发生了什么变化(代码中的转换说明%p会以十六进制显示指针的值)。
这是它的输出。经过分析可以得出,我的电脑中,地址按字节编址,short类型占用2字节,double类型占用 8 字节。在C语言中,指针加1指的是增加一个存储单元。对数组而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。
然后再提升难度,开始探讨多维数组。增加数组维数会增加指针的复杂度。以这段程序为例:
这是上面代码的运行结果。因为zippo和zippo[0]都开始于同一个地址,所以的值相同。结果显示出zippo[0]是一个占用一个int大小对象的地址,而 zippo 是一个占用两个int大小对象的地址。因为zippo[0]是该数组首元素(zippo[0][0])的地址,所以* (zippo[0])表示储存在zippo[0][0]上的值(即一个int类型的值)。与此类似,* zippo代表该数组首元素(zippo[0])的值,而zippo[0]是个地址。该值的地址是&zippo[0][0],即* zippo就是&zippo[0][0]。** zippo与* &zippo[0][0]等价,这相当于zippo[0][0]。简而言之,zippo是地址的地址,必须解引用两次才能获得原始值。
zippo:二维数组首元素的地址(每个元素都是内含两个int类型元素的一维数组)
zippo 2:二维数组的第3个元素(即一维数组)的地址
* (zippo 2):二维数组的第3个元素(即一维数组)的首元素(一个int类型的值)地址
* (zippo 2) 1:二维数组的第3个元素(即一维数组)的第2个元素(也是一个int类型的值)地址
* ( * (zippo 2) 1):二维数组的第3个一维数组元素的第2个int类型元素的值,即数组的第3行第2列的值(zippo[2][1])
下图更直观地演示了数组地址、数组内容和指针之间的关系。
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
相关文章
如何使用Visual Studio 2010编写一个C语言程序,本经验将手把手教大家如何通过VS2010编写一个简单的C语言小程序......
2023-03-16 407 C语言
怎样使用VC软件编译并运行C语言程序,ViualC 6.0是一款非常好的软件,它不仅可以运行C代码程序,还可以创建位图和PPT等工程文件,现在的全国计算机等级考试(二级C)指定的编译软件就是VC6.......
2023-03-16 168 C语言