簡體   English   中英

int *p[5]和通過malloc得到的指針有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM