这是我们在课堂上给出的一个例子。有人可以向我解释为什么打印29个地址而不是29“0”(零)?
int num[29];
是一个为29个整数留出29个地址的数组-i得到那个部分,但是在for循环中你不打印那些地址而不是地址本身的值吗?
另外,(num+i)
和(num[]+i)
之间的区别是什么?
我有点困惑..
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int num[29];
for (int i=0;i<29;i++)
cout << (num+i) << endl;
return 0;
}
答案 0 :(得分:8)
打印地址的原因是
(num+i)
是数组的i
元素的地址,而不是i
元素本身的地址。如果您想获得i
元素,可以编写
*(num + i)
或者,甚至更好:
num[i]
关于您的第二个问题 - 语法(num + i)
表示&#34;地址i
对象超过num
的开头,语法(num[] + i)
不合法C或C ++。
希望这有帮助!
答案 1 :(得分:3)
声明如:
int num[29];
定义了一个包含29个整数的连续数组。
要访问数组的元素,请使用num[i]
,其中i是索引(从第1个元素的0开始)。
表达式num
本身给出了数组第一个元素的指针(内存地址和类型)。
表达式ptr + i
(其中ptr是一个指针而i是一个整数)的计算结果是指向ptr之后i位置(以指针类型为单位)的指针。
所以num + i
给出一个指向索引为i的元素的指针。
表达式&a
给出了指向某个对象a
的指针。
表达式*ptr
给出了一些指针ptr指向的对象。
所以表达式a
和*(&a)
是等价的。
因此num[5]
与*(num+5)
和num+5
与&num[5]
和num
与&num[0]
当你用cout打印一个指针时,它会显示它的地址。
打印对象时,它将打印对象的值。
所以
cout << num + 5;
将打印num
的第5个(零索引)元素的地址和
cout << num[5];
将打印num
的第5个(零索引)元素的值