通过指针访问数组元素的各种方法

 时间:2024-10-12 20:49:15

1、先从最基本的概念开始。&是地址运算符。当它后面是一个变量名时,&给出该变量的地址。*是间接或解引用运算符。当它后面是一个指针时,*给出储存在指针指向地址中的值。数组名是数组首元素的地址。也就是说,如果 flizny 是一个数组,下面的语句成立:flizny == &flizny[0]; 另外,需要注意C语言运算符的优先级。间接运算符(*)的优先级高于+,如果dates是个数组名,则* dates+2相当于( * dates)+2:* (dates + 2) // dates 第 3 个元素的值* dates + 2 // dates 第 1 个元素的值加 2

通过指针访问数组元素的各种方法

2、先以这段程序为例。注意指针加上一个数时,它的值发生了什么变化(代码中的转换说明%p会以十六进制显示指针的值)。

通过指针访问数组元素的各种方法

3、这是它的输出。经过分析可以得出,我的电脑中,地址按字节编址,short类型占用2字节,double类型占用 8 字节。在C语言中,指针加1指的是增加一个存储单元。对数组而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。

通过指针访问数组元素的各种方法

4、然后再提升难度,开始探讨多维数组。增加数组维数会增加指针的复杂度。以这段程序为例:

通过指针访问数组元素的各种方法

5、这是上面代码的运行结果。因为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是地址的地址,必须解引用两次才能获得原始值。

通过指针访问数组元素的各种方法

6、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])下图更直观地演示了数组地址、数组内容和指针之间的关系。

通过指针访问数组元素的各种方法
  • 如何用C语言判断是否为素数
  • 微分方程的通解公式
  • 判断交错级数的敛散性方法
  • 空间向量在轴上的投影怎么求
  • 微分方程如何判断线性非线性?这个很简单!
  • 热门搜索
    手抄报的格式 节俭养德手抄报 家乡手抄报 手抄报设计图案大全 关于知识的手抄报 节约用水手抄报资料 我爱诗歌手抄报 汉字王国手抄报 森林防火手抄报资料 青春期手抄报内容