使用指標變數作為函式引數時,只有在獲取位址的情況下對元素(*p)進行操作,才能真正地修改變數。因為此時實參傳給形參,就是將堆上的申請的首位址傳給形參,這樣形參和實參都指向了堆上的記憶體,形參對堆上記憶體內容的修改,實參也是得到了修改。但是對傳入位址(p)進行操作是無法對原指標本身進行修改的。因為函式在接收引數的過程中是單向的一次性值傳遞,此時的引數傳入位址,呼叫函式時只是對值參產生乙個副本,對副本的操作不會影響原值,也就是說不會改變傳入位址。
例:
void swap(int* a,int* b)
//因為指標變數實際上是unsigned型的變數 所以上述**可以這麼理解:
void swap(unsigned int a,unsigned int b)
//這樣就容易理解為何出錯了
如果真的希望能夠修改主函式傳進來的指標變數,可以通過引用&、給函式加指標型的返回值、雙重指標(後續補充,因為不會)來解決。
引用&:
void swap(int* &a,int* &b)
指標型返回值:
由於c語言函式只能返回乙個值,故換個鍊錶初始化的例子:
mylist * initlist()//使用函式返回值的辦法
void initlist(mylist* &s)//使用引用的辦法
雙指標:
由於c語言函式返回值只能有乙個,當遇到需要輸出大於乙個返回值時,可以採取全域性變數、返回陣列或者結構體指標的辦法,例子後續補充(因為暫無時間)。
c編譯器沒有引用&,但是可以使用雙重指標;c++支援引用&。
c語言指標注意事項
這幾天對c語言的指標溫習了下,感覺理解又更深入了一步 c語言的精髓是指標我想確實一點都不錯,但是在使用的時候有很多要注意的地方,大概總結一下 1.指標指向常量區,是不能修改其值的 比如 char p abcfd char ptr abcfd p 1 c 此時會報錯,因為 abcfd 為常量區,其值是...
C語言指標用法注意事項
計算機系統中有四個記憶體區域 1 棧 在棧裡面儲存一些我們定義的區域性變數以及形參 2 字元常量區 主要是儲存一些字元常量 3 全域性區 在全域性區里儲存一些全域性變數和靜態變數 4 堆 堆主要是通過動態分配的儲存空間,即以下講的講的動態分配記憶體空間。定義int型指標int p,p是用來儲存乙個位...
C語言注意事項
1 fgetc與fputc函式 fgetc函式從指定的文 件中讀乙個位元組 fputc 函式向指定的檔案寫乙個位元組 2 r 是回車,n 是換行,前者使游標到行首,後者使游標下移一格。c語言程式設計時 windows系統 r 就是return 回到 本行 行首 這就會把這一行以前的輸出 覆蓋掉 如 ...