指標做形參做區域性變數以及記憶體分配

2021-06-28 03:13:14 字數 1339 閱讀 4751

指標做形參做區域性變數以及記憶體分配

塔機配件大全

一級指標做形參:首先一定要明白形參和你傳遞引數的那個實參是兩個不同的變數,即使同名也還依然不同。指標傳遞的是乙個變數或者乙個值的位址,但是它本身還是採用值傳遞的方式。即你不能使它指向另外一塊位址,但是你可以改變它指向的空間裡存的值。

二級指標做形參:二級指標也是傳值,但是他指向的位址是個一維指標,所以可以改變二維指標指向的位址空間裡的內容也就是要申請空間的一維指標,不能改變二維指標本身的值,即不能讓他指向乙個新的一維指標。所以二維指標傳遞的是乙個一維指標。

具體看下面這個程式以及輸出:

#include#include #include 

void getmemory1(char *p)}/*

但是上面的函式引數變為*char *&p就可以在主函式中正常輸出了。

指標做形參也是採用值傳遞的方式,也就是會把指標的值-位址傳過去,所以可以改變這個位址裡的內容,

但是你不能改變指標的值,也就是指向的位址。但是引用就是變數的別名,所以可以改變指標的值,

所以就可以在函式裡申請空間

*/char *getmemory2(void)

void getmemory3(char **p,int num)

}void main()

else

if (str4 != null)

scanf("

%d",&n);

}

指標做區域性變數:如果你申請了空間(用new等,賦值不算)又沒有delete,那麼這個空間在你程式執行結束之前不會釋放,只要你知道這個空間的位址,就可以訪問。這裡的賦值不算是指,比如,你先定義乙個陣列,然後把陣列名賦值指標。但是char *d = "zet";這種形式相當於new了4個空間。

下面是中興通訊2012校招筆試題目,問輸出什麼?

當時答錯(狂汗),現在搞明白,在函式裡寫了注釋:

#include //

此函式中d也是個區域性變數,函式執行完自動銷毀,但是指標分配的空間不會被自動**,除非程式設計師delete掉。

//所以這個可以正常輸出。

char *a()

//但是第二個陣列空間是系統維護的,函式執行完自動銷毀

char *b()

; return p;}//

引數是值傳遞方式,改變形參的位址,傳遞的實參的位址確不會因此改變

void c(int n,char *pname)

; pname = a[n];

}void main()

指標做形參,指標做區域性變數,陣列做形參,陣列做區域性變數之類的題目非常容易考到,而且容易迷糊,得不斷學習...

C 形參,區域性變數,靜態區域性變數區別

一.形參是一種自動物件,函式開始時為形參申請記憶體空間,呼叫函式時提供的實參初始化形參對應的自動物件 二.普通變數對應的自動自動物件,定義變數的語句出建立自動物件,所在塊結束,該變數也就結束 三.區域性靜態變數比較特殊,它的生命週期貫穿函式呼叫及之後的時間,區域性靜態變數對應的物件成為區域性靜態物件...

C 指標(二)指標變數做形參

指標變數同樣可以作為函式的形式引數 在這個程式中,定義了乙個函式compare,它的變數為兩個指標,函式中,將這兩個指標指向的資料互相交換 呼叫的時候,變數直接寫需要呼叫的變數的名稱,在這個例子中是 p1 p2,並不是 p1 p2 特別值得注意的是 這種使用指標變數為形參的函式執行過後,原來的變數中...

指標做形參新發現

其實也不算多新奇吧,但是困住了一會兒,我覺得有必要寫下來,大家都知道如果我傳個值給子函式不管我在子函式裡如何改變它,原來的值永遠不會變,另外乙個變數擁有兩個值,儲存在位址裡面的值和位址值,對於一般變數來說儲存在位址裡面的值為主值,位址值為副值,而對於指標來說正好相反,所以如果你宣告了乙個指標並且想對...