设为首页 加入收藏

TOP

4.8.1 程序说明(1)
2013-10-07 15:39:23 来源: 作者: 【 】 浏览:74
Tags:4.8.1 程序 说明

4.8.1  程序说明(1)

在多数情况下,C++(www.cppentry.com)将数组名解释为数组第1个元素的地址。因此,下面的语句将pw声明为指向double类型的指针,然后将它初始化为wages-wages数组中第1个元素的地址:

 

和所有数组一样,wages也存在下面的等式:

为表明情况确实如此,该程序在表达式&stacks[0]中显式地使用地址运算符来将ps指针初始化为stacks数组的第1个元素。

接下来,程序查看pw和*pw的值。前者是地址,后者是存储在该地址中的值。由于pw指向第1个元素,因此*pw显示的值为第1个元素的值,即10000。接着,程序将pw加1。正如前面指出的,这样数字地址值将增加8,这使得pw的值为第2个元素的地址。因此,*pw现在的值是20000-第2个元素的值(参见图4.10,为使改图更为清晰,对其中的地址值做了调整)。

 
(点击查看大图)图4.10  指针加法

此后,程序对ps执行相同的操作。这一次由于ps指向的是shor t类型,而short占用2个字节,因此将指针加1时,其值将增加2。结果是,指针也指向数组中下一个元素。

注意:将指针变量加1后,其增加的值等于指向的类型占用的字节数。

现在来看一看数组表达式stacks[1]。C++(www.cppentry.com)编译器将该表达式看作是*(stacks + 1),这意味着先计算数组第2个元素的地址,然后找到存储在那里的值。最后的结果便是stacks [1]的含义(运算符优先级要求使用括号,如果不使用括号,将给*stacks加1,而不是给stacks加1)。

从该程序的输出可知,*(stacks + 1)和stacks[1]是等价的。同样,*(stacks + 2)和stacks[2]也是等价的。通常,使用数组表示法时,C++(www.cppentry.com)都执行下面的转换:

 
如果使用的是指针,而不是数组名,则C++(www.cppentry.com)也将执行同样的转换:

 

因此,在很多情况下,可以相同的方式使用指针名和数组名。对于它们,可以使用数组方括号表示法,也可以使用解除引用运算符(*)。在多数表达式中,它们都表示地址。区别之一是,可以修改指针的值,而数组名是常量:

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.4.1 在程序中使用结构 下一篇4.4.3 结构可以将string类作为成..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)