DevC++上发生了一个奇怪的sizeof()错误

Seb*_*ian 2 c c++ arrays dev-c++

我知道我不应该使用Dev-C++,但它在学校是强制性的,所以我对此无能为力.

主题是C/C++中的指针,并且在测量整数数组的长度时发生了错误.请参阅以下代码:

// POINTER
# include<iostream>
# include<string.h>

using namespace std;

int main(){
    //neues Feld anlegen
    int *a = new int[5];

    a[0] = 12;
    a[1] = 5;
    a[2] = 43;
    a[3] = -12;
    a[4] = 100;
    // Feld füllen

    for(int i = 0; i<sizeof(a);i++){
            cout<<a[i]<<"\n"<<endl;
            }
    cout<<sizeof(a);
    system("pause");
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

sizeof()返回4而不是5 ...任何想法?

Dan*_*ite 26

它不是一个bug,因为它返回a自身的大小(int*在32位构建时为4字节类型),而不是数组的长度.

请注意 - 其他人说,大小取决于操作系统,这是一半的真实.这真的取决于构建.sizeof是一个编译时构造.


Sim*_*one 5

首先,你不应该认为"奇怪"行为的罪魁祸首是编译器:大多数时候这个bug都是你的.

事实上,你的sizeof指令告诉你一个int*和那个设计的大小是什么,所以这不是编译器的错,而是你的误解.没有办法用来sizeof告诉动态分配的数组的大小.