本文目錄一覽:
C語言中地址符究竟是什麼
簡單說,
scanf
要求參數是地址.
因為,
要修改數據,必須傳遞地址或引用.
c語言中取地址符和*有什麼區別?
不都是取地址。
1,符號含義不同:是取地址運算符,a為變量a的地址。
2,用法不同:聲明中 int x; x 是整型量。
語句中,x 是整型量x的地址。不是指針,才有。
語句中,x 是整型量x的值。
3,指向不同:*是指針運算符,*p為指針變量p所指向的存儲單元中的內容。而指針變量p中一般只存放地址。* 表示指針,例如: int *p; — p 是指針,指向整型量。
語句中,*p 表示指針指向的整型量的值。
語句中,p 表示指針指向的地址。
語句中,沒有 p 形式,如果p是指針。
擴展資料
*空指針,*野指針
在函數內部對指針進行賦值操作後,在函數執行完畢後,該指針就成了一個空指針(變量從棧中彈出)。但是通過動態地址分配(堆空間)的指針不會有上述問題。
free(p)後釋放內存的指針為野指針。
指針(pointer)是對數據對象或函數的一種引用。指針有多種用途,例如定義“傳址調用”函數,它還可以實現動態數據結構,例如鏈表和樹。
通常,管理大量數據的有效方法不是直接處理數據本身,而是使用指向數據的指針。例如,如果需要對大量的大型記錄進行排序,對指向該記錄的指針列表進行排序效率要比直接對記錄排序高得多,因為這樣無需在內存中移動數據。
類似地,如果需要把大型記錄傳入函數,傳遞指向該記錄的指針會比直接傳遞記錄本身更經濟,即使函數不需要修改該記錄。
指針代表了一個對象或函數的地址和類型。如果一個對象或函數具有 T 類型,那麼指向它的指針就具有一個衍生出的指向 T 的指針類型(pointer to T)。
例如,如果 var 是一個 float 變量,那麼表達式 var(其值是該 float 變量的地址)屬於指向 float 的指針類型,按照 C 語言表達,就是 float* 類型。
指向任何 T 類型的指針也被簡稱為 T 指針(T point)。因此,var 中地址運算符會生成一個 float 指針。
因為 var 沒有在內存中移動位置,所以表達式 var 是一個常量指針。然而,C 也允仵使用指針類型來定義變量。指針變量存儲的是另一個對象或函數的地址。
我們後面會進一步討論指向數組和函數的指針。首先,看看如何聲明指向非數組對象的指針,語法如下:
類型 * [類型限定符列表] 名稱 [= 初始化器];
在聲明中,星號(*)表示“指向的指針”。標識符“名稱”被聲明為一個對象,其對象類型為“類型”,也就是“指向‘類型’的指針”。類型限定符為可選擇項,可能包含 const、volatile 和 restrict 的任意組合。
參考資料
百度百科——指針
c語言取地址符有什麼用,為什麼scanf一定要用&
取地址 就是把變量轉為指針, 起到傳地址調用函數的效果.
而C語言中函數傳參有兩種,傳值調用 和傳指針調用.
傳值調用時, 被調函數中改變參數值不會影響主函數.
只有傳指針調用, 才可以將參數值回傳給主函數.
scanf中要根據輸入對參數賦值, 所以 必須傳指針調用.
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159683.html