2013-06-18 44 views
0

我試圖找出一個數組的長度,但我得到奇異數...計算長度給出了奇怪的結果

#include <stdio.h> 
#include <stdlib.h> 

const int numOfCoordinates = 100; 

typedef struct { 
    int x; 
    int y; 
    int counter; 
} Coordinate; 

Coordinate *coordinatesMainArray; 
Coordinate endPoint; 
Coordinate startPoint; 


int main(int argc, const char * argv[]) 
{ 
    endPoint.x = 8; 
    endPoint.y = 3; 
    endPoint.counter = 0; 

    startPoint.x = 1; 
    startPoint.y = 4; 

    coordinatesMainArray = malloc(sizeof(Coordinate) * 1); 
    coordinatesMainArray[0] = endPoint; 



    int a = sizeof(coordinatesMainArray); 
    int b = sizeof(coordinatesMainArray[0]); 
    int coordinatesMainArrayLength = (a/b); 

這是我的代碼,直到我需要coordinatesMainArray長度的一部分。 但我得到a = 8和b = 12。

我想我會得到兩個相似的大小,所以它顯示我有我的數組中的一個元素。

我在做什麼錯了?

+2

我假設教程沒有關於'sizeof'運算符的一章,是否......>。< – 2013-06-18 11:59:42

回答

7

sizeof(coordinatesMainArray)給你coordinatesMainArray變量的大小 - 一個Coordinate*

sizeof(coordinatesMainArray[0])給你的第一個元素的coordinatesMainArray陣列中的尺寸 - 一個Coordinate實例。 sizeof(*coordinatesMainArray)本來就等於這個。

順便說一句,沒有辦法使用指針來確定數組的大小。您需要單獨存儲陣列大小,並將此數組以及陣列指針傳遞給其他函數,或者保證陣列以已知終結器值結尾(例如,NULL

1

在這種情況下,sizeof將只返回coordinatesMainArray指針的大小(不管其內容大小),因爲它是在運行時分配的。

0

sizeof(coordinatesMainArray)給你sizeof(Coordinate *)sizeof(coordinatesMainArray[0])給你sizeof(Coordinate)

首先是sizeof指針,第二個是sizeof數組元素。

0

當您使用malloc分配內存時,它不會保留分配的塊的大小。至少不能訪問您的常規代碼。如果你分配內存,你必須自己跟蹤大小。

在你的例子中,你剛剛得到了指針(a)的大小和單個結構(b)的大小。