2016-11-28 31 views
-1

這是我正在開發的程序,它很簡單,但幫助我找出C++的基本知識。我正在努力使用指針,並試圖瞭解它是如何工作的。數組中的值的總和返回內存地址,除非sizeof(array)/ 2

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

你做'new int [0]'... – Jarod42

+1

另外,'sizeof(tableauDeNotes)'計算的是指針的大小,而不是數組中的項目數。 –

回答

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運算符。