除非sizeof(array)/ 2,否则数组中的值之和将返回内存地址

时间:2016-11-28 22:15:34

标签: c++ arrays sum

这是我正在研究的程序,它很简单,但帮助我弄清楚C ++的基础知识。我正在努力学习指针并尝试理解它是如何工作的。

    int main()
            {

                unsigned int note;
                unsigned int nombreDeNotesASaisir = 0;
                unsigned int totalDesNotes = 0;

cin >> nombreDeNotesASaisir;

                int* tableauDeNotes = new int[nombreDeNotesASaisir] {};

        for (int i = 0; i < nombreDeNotesASaisir; i++)
            {
                cin >> note;
                tableauDeNotes[i] = note;
            }

                // method that is supposed to make the sum of all the values inside the array 

                for (int i = 0; i < sizeof(tableauDeNotes); i++)
                {
                    totalDesNotes += *(tableauDeNotes + i);
                }

                cout << "le total des notes est de :" << totalDesNotes << "\n";

                //print the average of all the marks

                unsigned int moyenne = totalDesNotes / nombreDeNotesASaisir;
                cout << moyenne << ' ';


                return 0;
            }

我似乎无法获得操作的结果,相反我认为我得到了内存地址,为什么是这样,我该怎么做才能让它工作?

PS:奇怪的是,当我将sizeof(数组)/ 2除以后,它会返回正确的值总和

1 个答案:

答案 0 :(得分:0)

运算符“sizeof”不返回数组中的元素数。 相反,它返回传递的变量的大小。

在你的情况下,传递的变量是指针而不是数组! 指针的大小在32位体系结构上是4个字节,在64位体系结构上是8个字节。因此sizeof(tableauDeNotes)返回4或8。

如果您有这样的变量:

int myTable[5];

然后这将是数组。 sizeof(myTable)将返回myTable的总大小,即:

sizeof(myTable) = 5 * sizeof(int)

因此,取决于体系结构,它将是32位整数: 5 * 4 = 20 或64位整数: 5 * 8 = 40。

如果您想获得myTable中的元素数量,可以使用:

int numElements = sizeof(myTable) / sizeof(int);

但它仅适用于表格,而不适用于指针,就像你的情况一样。

在您的情况下,您应该使用nombreDeNotesASaisir而不是sizeof运算符。