C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组

本文详细探讨了指针与数组之间的关系,包括如何通过指针访问数组元素、指针算术与数组下标的关系,以及多维数组的指针表示法。通过具体的代码示例,展示了不同的访问方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上例,这次谈一下指针和数组的关系。

在上例中的例子其实已经涉及到了数组。我们采用的是通过地址运算符(&)来获取数组第一个元素的地址。其实另外还有一种方法,那就是:直接使用数组的名字。在表达式中使用数组名就相当于使用数组的第一个元素的地址。

下面的例子是等效的:

float* dp1 = &dues[0];

float* dp2 = dues;

 

我们来进一步讨论这种新的表示方法。

一个数组后面跟上加号和一个整型的表达式,就相当于以该整型表达式作为下标的数组元素的地址。

例如:

float* dp1 = &dues[2];

float* dp2 = dues+2;

 

如果是多维数组,那么在不带任何一维的下标时,这种地址表示法仍然适用。

先看下面的例子:

运行结果:

 

更令人疑惑的是,还可以在指针的后面加上数组的下标。

下面的代码是等价的:

int* ip;

x = *(ip+3);

x = ip[3];

这个例子表明,即使ip是一个指针,当他指向一个数组时,也可以采用数组元素的表示法来使用这个指针。

不仅如此,还可以利用指针表示法来使用数组名,这样也可以访问数组的元素。

例如:

int ia[10];

x = ia[3];

x = *(ia+3);

以下代码给出了指针和数组的常见用法:

运行结果如下:

可见,上诉6种写法都会在控制台输出同样的结果。

注意:

推荐最好还是对于下标就采用下标表示法,对于指针就采用指针表示法,这样更清晰易懂。上诉代码中的前2个循环就是如此。

 

另外还有一种变化形式是把数组变成一个指向数组的指针。如下所示,把上诉代码中的msg声明为一个字符型指针:

char* msg = "Now is the time/n";

程序将产生同样的输出结果。

可见,可以使用一个字符串常量来初始化字符型指针。在编译器内部,用一个字符型数组来表示字符串常量,当使用字符串常量时,实际上是引用它的内部地址。所以,把字符串赋给字符型指针实际上就是把常量的地址赋给指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值