我知道全域/靜態變數在 C 中默認設定為 0 或等效值。
指向結構的指標怎么樣?
例如,考慮下面的代碼 -
typedef struct meh
{
int * ptr;
int a;
char c;
}var;
var *p;
int main(){
p = malloc(sizeof(var));
var *p1 = malloc(sizeof(var));
printf("%d\t%p\t%c", p->a, p->ptr, p->c);
printf("\n%d\t%p\t%c", p1->a, p1->ptr, p1->c);
return 1;
}
//Output for both cases : 0 (nil) '\0'
無論指標的范圍如何,結構指標的取消參考值是否始終設定為 0?或者這里有更具體的規則在起作用。
uj5u.com熱心網友回復:
malloc函式回傳的記憶體未初始化。回傳的指標是分配給區域變數還是全域變數無關緊要。
這意味著指向的物件具有不確定的值,讀取它們會導致未定義的行為。
如果您使用該calloc函式分配記憶體,則回傳的記憶體將所有位元組設定為 0。這意味著整數型別的值為 0。如果使用 IEEE754 表示形式,浮點型別也將為 0 ,如果使用IEEE754 表示,NULL 則指標值將為空指標表示為所有位元組 0。在大多數系統上,您可能會遇到這種情況,但通常情況并非如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456701.html
