2015-10-10 79 views
-6

在數組中有四個元素,所以它的大小應該是4bit * 4 = 16.(一個int數據類型在我的系統中需要4位來存儲值)。但是當我運行這段代碼時,我只獲得了8位,尺寸爲dynamicArraysizeof動態數組不正確

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

int main(void) { 

    //Dynamic arrays save memory by creating a pointer that stores 
    //the beginning of the array 
    int *dynamicArray = malloc(20 * sizeof(int)); 
    *dynamicArray = 10; 
    printf("Address %x stores value %d\n", dynamicArray, *dynamicArray); 

    dynamicArray[1] = 20; 
    printf("dynamicArray[1] stores value %d\n", dynamicArray[1]); 
    dynamicArray[2] = 45; 
    printf("dynamicArray[2] stores value %d\n", dynamicArray[2]); 
    dynamicArray[3] = 34; 
    printf("dynamicArray[3] stores value %d\n", dynamicArray[3]); 
    printf("The size of dynamicArray is %d\n", sizeof(dynamicArray)); 

    // Release unused memory: 
    free(dynamicArray); 

    return EXIT_SUCCESS; 
} 

這裏是輸出圖像。

enter image description here

還建議我網站對C檢查內置功能性或瞭解更多關於他們的。 謝謝。

+0

「*建議我爲C網站檢查內置的函數屬性或瞭解它們更多*」 - 對不起,但這是離題。只需谷歌功能獲取其細節。 –

+0

好的。謝謝 –

+0

並使用'%p'打印地址,而不是'%x'。 –

回答

6
  • 您沒有數組;你有一個指針。

  • 指針的大小以字節爲單位,而不是位。

  • sizeof在編譯時評估,對任何給定的表達式或類型都是常量。它不依賴於數組中「填充」元素的數量(或者指向某些空間的指針,以保持這些元素)。

您的表達等同於sizeof(int*),指針在您的環境中爲8個字節。

+0

其實我想檢查是'malloc'釋放未使用的內存。我初始化dynamicArray指針指向第一個元素。因爲我只用了20個元素中的4個元素,所以它應該釋放剩下的空間。那我該如何檢查這個。正如你所說,如果我做sizeof(dynamicArray)它將返回指針的大小。 –

+0

@HemantParihar:*「因爲我只使用了20個元素中的4個元素,所以它應該釋放剩下的空間。」*沒有理由應該這樣做。 – Ryan

+0

我在某處通過使用動態內存分配我們可以釋放未使用的內存。我們如何才能做到這一點。我是C新手。你能建議一些關於動態內存管理和malloc的鏈接。 –

1

我在32位計算機上運行了您的代碼,並且sizeof(dynamicArray)的值確實報告了4.我打賭您的計算機是64位,這就是爲什麼值爲8的原因。

看一看:http://www.viva64.com/en/a/0004/並查找標題爲「表N2.32位和64位數據模型」的表。這將有助於解釋爲什麼有些系統報告4和一些報告8爲sizeof(dynamicArray)的值。