![](/img/trans.png)
[英]What is the difference between malloc(sizeof(int)) and malloc(sizeof(int*))
[英]What is the difference between int *p[5] and a pointer obtained through malloc?
我似乎無法理解以下之間的區別:
int *p[5]
和
int *p;
p = (int*)malloc(sizeof(int)*5);
我剛開始學習 C-ANSI 指針並且了解基礎知識,但直到幾個小時前我還認為前兩行是等價的。
我知道第一個是 int 類型的指針數組(能夠存儲 5 個 int 指針),但最后一行不一樣嗎?
或者它只是另一種寫作方式:
int arrayX[5];
int *p;
p = arrayX;
但動態分配呢?
先感謝您。
int *p[5]
聲明了一個包含 5 個int
類型指針的數組。 因此, p[0]
本身就是一個指向int
的指針( p[1], p[2], p[3], p[4]
也是)。 然后, p[i][0]
將是某個int
值(假設p[i]
指向某個分配的內存區域)。 根據 memory p[i]
指向多少,您將能夠通過p[i][j]
訪問許多int
值。
當您調用malloc()
時,您要求足夠的 memory 來保存sizeof(int) * 5
個字節,這實際上是 5 個int
值。 如果分配沒有失敗, malloc()
返回一個指向分配 memory 的指針。因此,當您編寫:
int *p = malloc(sizeof(int) * 5);
p
是指向 memory 區域的指針,該區域已分配用於存儲 5 個int
值。 因此, p[0], p[1], p[2], p[3], p[4]
都有int
值。
總之:
int *p[5]; /* p[i] is a POINTER to INT, and p[i][j] is an INT */
int *p = malloc(sizeof(int) * 5); /* p[i] is an INT */
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.