指標為什麼要動態分配空間

2021-10-09 12:14:47 字數 584 閱讀 1589

你需要分清「指標所占用的記憶體空間」和「指標指向的記憶體空間」之間的區別。指標變數需要儲存它所指向的記憶體位址,涉及到儲存就需要空間,例如在64位程式中,任何乙個指標變數都占用64位即8位元組的記憶體空間。而指標所指向的記憶體空間,指的是根據指標變數中儲存的記憶體位址定址到對應位置的記憶體空間。這就好比房間和門牌號的關係,門牌號需要寫在乙個牌子上,這個牌子就是指標變數所占用的記憶體空間,而房間本身則是指標變數指向的記憶體空間。

第二,sizeof關鍵字的結果是在編譯期就計算好的,對於double型別的指標p來說,sizeof(*p)就是sizeof(double),而double型別占用8個位元組,這是在編譯時就確定的,和p具體指向**是完全沒有關係的,也就是說在這個程式執行之前,sizeof(*p)就已經確定是8。

「可以*p=5這樣賦值」,這是不可能的,原因很簡單,double *p只是定義了乙個指標變數p,此時變數p中的內容也就是p所指向的位址是完全不可預知的,此時向p所指向的記憶體空間直接寫入資料,是未定義行為,結果是不可預知的,程式很有可能因此崩潰。而malloc的作用,就是向作業系統申請一塊可用的記憶體空間,再令p指向這片記憶體空間,就可以像其中寫入資料了。

C C 為什麼使用動態分配?

include include include why1 按需分配,不浪費記憶體 intmain int salary null int n 0 printf 請輸入僱傭人數 scanf s d n scanf s d n if n 1 二.列印 for int i 0 i delete salar...

字串二重指標為什麼需要動態分配空間

指標的概念 建立乙個指標型別的資料,在64位系統中,乙個指標型別的資料用8個位元組表示。指標型別的資料儲存某個資料的位址。編譯器,可以根據指標位址處理該位址的資料。首先考慮字串的儲存模型,如下圖所示。字串變數s其實是儲存了字串首字母的位址,指標p為字串首字母的位址。輸出字串時,printf 讀入的位...

儲存空間動態分配

ansi c說明了三個用於儲存空間動態分配的函式 1 malloc 分配指定位元組數的儲存區。此儲存區中的初始值不確定 2 calloc 為指定長度的物件,分配能容納其指定個數的儲存空間。該空間中的每一位 bit 都初始化為0 3 realloc 更改以前分配區的長度 增加或減少 當增加長度時,可能...