这是我正在研究的程序,它很简单,但帮助我弄清楚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除以后,它会返回正确的值总和
答案 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运算符。