【发布时间】:2023-03-31 23:00:03
【问题描述】:
我经常听说数组的名字是指向一块内存的常量指针,因此像这样的语句
int a[10];
和
int * const p= a;
在某种意义上必须相等,因为 p 是指向与数组 a[] 相同的内存块的指针,并且不能更改为指向内存中的另一个位置。
但是,如果您尝试打印这两个指针的 sizeof,您会得到不同的结果:
cout<< sizeof(a); // outputs size of 10 integer elements
虽然
cout<< sizeof(p); // outputs sizeof pointer to int
那么,为什么编译器会以不同的方式处理这两者?从编译器的角度来看,数组和指针之间的真正关系是什么?
【问题讨论】:
-
你经常被误导——或者你只是被误解了。数组不是指针。
-
一个
T类型和大小N的数组是N-许多T类型的对象放置在顺序内存中。仅仅因为您可以使指针指向该内存,并不能使数组成为指针。 -
它们是不同的,因为c++是一种强类型语言,而sizeof特别指的是类型。有很多运行时情况,其中 a 和 p 可以互换使用(只要您保持在正确的范围内),但它们仍然是不同的类型。