最近有看官遇到了關於數組大小的問題,我在這裡專門做一個說明,希望對大家有幫助。
通常情況下,計算數組大小時都是使用sizeof操作符,於是不加思考就直接使用。有的時候,在程序中想使用數組中元素的個數,結果也使用sizeof去計算,這時就會出問題,但是又不知道問題出在哪裡。其實是對sizeof操作符理解不深。
我們先說明一下兩個概念:數組的大小和數組中元素的個數。
數組大小:指數組占用的內存空間大小。 數組中元素的個數:指數組中元素的數量。大家首先要知道sizeof操作符計算出的是內存空間的大小。當我們使用sizeof對數組進行操作時,計算出的是數組占用的內存空間大小,也就是通常說的數組大小。我們舉個例子:
sizeof(int)的結果是4(與編譯器和具體的機器有關)表示int類型的值占用4個字節的內存空間。
sizeof(array)的結果是8,表示數組array占用8個字節的內存空間。
明白上面的例子後,我們可以使用整個數組占用內存空間的大小除以數組中單個元素占用內存空間的大小,得到的結果就是數組中元素的個數。接下來我們舉例子進行說明:
#include
#include
#define SIZE 7
typedef struct person
{
int age;
char *name;
char flag;
}Person;
int main()
{
int array1[SIZE];
char array2[SIZE];
Person array3[SIZE];
printf("the size of array1 is %d ,and it have %d elements \n",sizeof(array1),sizeof(array1)/sizeof(int));
printf("the size of array2 is %d ,and it have %d elements \n",sizeof(array2),sizeof(array2)/sizeof(char));
printf("the size of array2 is %d \n",strlen(array2));
printf("the size of array3 is %d ,and it have %d elements \n",sizeof(array3),sizeof(array3)/sizeof(Person));
return 0;
}
編譯上面的程序並且運行,可以得到下面的結果:
the size of array1 is 28 ,and it have 7 elements //int 類型的數組
the size of array2 is 7 ,and it have 7 elements //char類型的數組
the size of array2 is 7 //char類型的數組當作字符串處理
the size of array3 is 84 ,and it have 7 elements //結構體類型的數組
看官們,我們在上面的例子中使用了三種類型的數組,大家可以看到不同類型的數組占用的內存空間是不同的,但是數組中元素的數量是相同的,因為我們在定義數組時使用了一個宏。
另外,char類型的數組大小和數組中元素的個數相同,因為在我的電腦上char類型的變量占用一個字節的內存空間。此外,該類型的數組也可能當作字符串來處理,這時使用字符串函數strlen也可以得出數組的大小。
看官們,在編寫程序的時候,一定不要把數組大小和數組中元素的個數混淆。它們是兩個不同的概念,而且計算方法也不相同。
如果想知道數組的大小,那麼直接使用sizeof對數組進行操作就可以。如果想使用數組中元素的個數,那麼需要使用我們在上面例子介紹過的除法操作。各位看官,關於數組大小的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 .