關於指標在函式中賦值的問題

2021-08-21 09:12:09 字數 733 閱讀 6170

1、最簡單的有swap(int a,int b)函式,估計這個大家都是知道的。其實這也是下面要討論的問題的癥結所在,那就是函式的引數和傳進的變數之間的關係,我們可以通過程式輸出位址發現,引數和傳入的變數並不是公用乙個位址,也就是引數只是對變數的乙個簡單的copy。

2、看下面一段**:

typedef struct nodenode;

void test(node *b)

void main()

在這裡我們需要知道的一點記憶體分配的知識:

1、引數、區域性變數分配在棧區中。編譯器自動**

2、malloc申請的記憶體分配在堆上,由程式結束os**

3、全域性(靜態區),全域性變數和靜態變數,由程式結束os**

如果大家不知道這個正確結果的情況下,可能會這樣認為,因為malloc申請的空間是在堆上面的,所以在函式釋放的時候,空間還是存在的,那麼主函式的指標b的指向的空間還是存在的。

但是大家通過執行就會知道這段**是會報錯的,原因我們最開始已經說了,對的,那就是引數的指標b只是對主函式指標b的淺層copy,這相當於是兩個指標,在傳遞的情況下是指向的同乙個空間。但是隨著在test函式中指標重新申請空間,那麼主函式的指標空間還是指向原來的地方(並沒有初始化),而test函式中的函式是指向了新申請的空間。所以這就導致了錯誤。

那麼正確的解決方法就是,test函式中的引數指標比主函式的指標高一級,也就是傳入的是位址,那麼就可以直接對那個位址空間操作。

關於指標的賦值問題

void copy 2th to sdram void 目的是將2048到4096的記憶體 拷貝到0x30004000 上 這時,pdwdest 0x30004000,也就是說pdwdest存放了乙個4位元組的int型,在進行解引用時,指向0x30004000 pdwdest 由於是int型 pdw...

ObjectC中關於賦值的問題

是這樣的 examdetailvalue builddetailvalue nsdictionary dic import inte ce examdetailvalue nsobject property strong,nonatomic nsstring examid property stro...

指標如何賦值?關於指標的理解

資料結構文章推薦 順序表和煉表實現圖書管理系統 多種方式實現英文單詞詞頻統計和檢索系統 深度優先搜尋判斷有向圖路徑是否存在 待更新 今天班上的一位學霸在學習資料結構的字串的時候遇到了乙個問題,這個問題就是他在寫 的時候,不管怎麼樣主函式裡就是不能夠給指標賦值,就算賦值了好像指標裡啥都沒有,更別說使用...