【发布时间】:2020-10-09 14:20:19
【问题描述】:
考虑以下代码:
int main(){
int arr[] = {1,2,3,7,8};
int size = sizeof(arr);
cout << size;
}
我知道上面的代码将打印数组的大小,即 4*5 = 20 字节,但我对此有一点疑问,arr 是指向数组中第一个元素的指针,大小为一个 ptr 变量是 4 个字节,为什么它不在控制台中打印出 4?
即使我们取消引用arr 并打印它,也会打印数组中的第一个元素。
cout << *arr;
那么这个sizeof() 操作符在数组的情况下是如何工作的呢??
【问题讨论】:
-
数组和指针不是一回事。有时他们会感到困惑,因为数组很容易变成指向其第一个元素的指针。但这并没有在这里发生。
-
感谢您的编辑。这是一个很好的问题。投赞成票!
-
"
arr是指向数组中第一个元素的指针" - 不,不是。但是,如果在预期指针的上下文中使用arr,它确实衰减 到这样的指针中。在这个例子中不是这样,所以sizeof()看到整个数组,而不仅仅是指向它的指针。