#include<stdio.h>
#include<stdlib.h>
int main() {
int *n = malloc(sizeof(int*));//line 1
scanf("%d",n);
printf("%d",*n);
}
我不確定這里發生了什么。第 1 行(在上面的片段中)是否意味著 n 現在只是一個指向 int 的指標?我們已經開始使用為指標分配的記憶體作為變數本身了嗎?指向指標的指標是否轉換為指向 int 的指標?

uj5u.com熱心網友回復:
在這一行
int *n = malloc(sizeof(int*));//line 1
您分配了大小等于的記憶體,sizeof( int * )并將其地址分配給n具有型別的指標int *。
所以使用這個指標來訪問記憶體它被解釋為一個存盤型別物件的記憶體int
scanf("%d",n);
printf("%d",*n);
實際上,用于指定分配記憶體大小的引數運算式的種類并不是很重要。例如你可以寫
int *n = malloc( 8 );//line 1
uj5u.com熱心網友回復:
malloc對型別一無所知,它只關心大小。
正確的咒語是
T *t = malloc(sizeof(*t)); // or
T *t = malloc(sizeof(T));
如果您將任何其他運算式傳遞給malloc并且它恰好具有正確的值,那么您很幸運,并且沒有發生任何不好的事情。但這令人困惑。不要混淆代碼的讀者。
如果傳遞給的值malloc大于正確的值,則只會浪費記憶體。如果它較少,您將面臨未定義行為的風險。
它是由實作定義sizeof(int)的,是否相同、大于或小于,sizeof(int*)所以不要那樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/506480.html
上一篇:為什么我在嘗試參考結構中的值時會在('之前得到一個預期的識別符號
下一篇:如何使指標跟隨c 中的另一個指標
