學習c時就粗略學了c中的地址,但有很多問題想請問大家。
我嘗試撰寫了下面代碼,通過代碼我發現了地址的用法比較混亂不清。

這是鏈表頭結點,節點還有線性表的定義;
這里沒有用區域變數的方式進行鏈表節點的添加,而是用了地址。想法是鏈表的next都存盤的是下一個節點的地址,代碼l.next=l.netx->next會是地址覆寫,所以我建立一個順序表來存盤每一個節點地址。

但是這里出現了這個問題

我認為這里l.next存盤的就是下一個節點的地址而已,但出現了這個問題所以我想要強制轉換為(int *),這樣確實會使報錯消失,但我不知道這樣做是否有效,還是我將順序表那個addsize的資料型別改成struct biao*呢?地址是int型的還是每個資料型別的地址其資料型別都存在相應的關系,只不過數值都是十六進制數,所以存盤l.next指向的地址需要定義struct biao *address嗎?請問可以這樣做嗎?或者應該怎樣做?還是不能這樣實作呢?

這里就當作可以存盤后繼續向下,編譯l.next=l.netx->next,使l.next被重復回圈直到最后一個節點然后實作插入新節點操作。
這里的scanf(“%c”,&l.next->date)為什么還要在l.next->date之前加取地址符呢?l.next->date這本身不是地址嗎?
還有就是該函式最后一行p.addsize=o;這是避免首地址丟失的,前面截圖最后一行有問題。

再次使用鏈表時候,只能通過線性表中存盤的地址訪問,所以我撰寫了賦值,但系統報錯,我認為l.next中是一個地址但這樣不可以 需要怎樣強制轉換呢?為什么?其存盤的不是地址嗎,但是為什么不是int型別,我認為int型別應該不可以強制轉換為struct biao*吧,怎么用地址訪問該地址所儲存的資料呢,有*訪問可以嗎,比如*lite.next來訪問(這里是根據int *p=&a; 所以*p就是a的數值產生的設想。
我想請問的是能否麻煩您告訴我一下c語言地址的這些用法,萬分感謝,以上沒有用代碼一一檢驗是因為不太會檢驗,即使出來結果也不懂為什么
這些都是我根據地址所產生的問題和想象,可能并不符合c語言的規定,請諒解
uj5u.com熱心網友回復:
子曰:思而不學則殆。語言標準這種東西是前人發明出來的,并不是自然規律。有前人的奇思妙想在里面。光靠琢磨是不能全面掌握的。
諸多教材可以指導循序漸進地學習,就算有這樣那樣的缺點,有教材指導也好過兩眼一抹黑呀。
先學習指標--指標與陣列--指向陣列元素的指標和指向一維陣列的指標--同種指標變數構成的陣列--指向指標的指標
再看函式--遞回--變數作用域與生存周期--回傳指標的函式與指向函式的指標
教材中上述內容當可為你解惑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278600.html
標籤:C語言
上一篇:求助大佬,究竟是哪里出了問題?
