關(guān)于linklist L 和linklist &L的區(qū)別
在討論關(guān)于linklist L 和linklist &L的區(qū)別之前,先明確一點(diǎn),這樣寫法在C編譯器上是無法運(yùn)行的,因?yàn)檫@是C++的特性,而非C語言的范疇。在C++環(huán)境下,我們可以在文件中實(shí)現(xiàn)并運(yùn)行這樣的代碼,這是因?yàn)镃++編譯器在很大程度上兼容C語言的寫法。
接下來,讓我們探討為什么會有這樣的寫法及其用途。當(dāng)函數(shù)的參數(shù)是linklist &L時,意味著在函數(shù)內(nèi)部使用的L將直接引用外部的L變量,類似于全局變量的作用。這意味著,修改函數(shù)中的L實(shí)際上會直接影響到主函數(shù)中的L的值。這種情況下,如果L的值需要發(fā)生變化,例如在執(zhí)行不帶頭結(jié)點(diǎn)的頭插法建立單鏈表等操作時,我們應(yīng)當(dāng)傳遞形參linklist &L;相反,如果L的值不需要變化,比如在查詢鏈表值等場景,則只需傳遞linklist L即可。
為了更直觀地理解這一點(diǎn),我們可以將傳入linklist &L視為將L作為全局變量的引用使用。在函數(shù)內(nèi)部,L的值可以直接修改,而不會影響到外部作用域中的L。然而,需要注意的是,盡管L在這里扮演了全局變量的角色,但它本身并沒有任何特殊之處,只是作為一個普通的全局變量來處理。當(dāng)在函數(shù)中將L的值賦給了另一個變量,如linklist p = L,此時得到的p只是L的一個副本。因此,修改p的值不會影響到L的值。
綜上所述,linklist &L的使用實(shí)際上是一種將局部變量與全局變量進(jìn)行等效處理的方法,通過傳遞引用而非復(fù)制,實(shí)現(xiàn)數(shù)據(jù)在函數(shù)內(nèi)部的高效訪問與修改。這一特性在C++中被廣泛利用,但在理解其原理時,應(yīng)區(qū)分C++與C語言的語法差異。對于這個問題,其解答并不復(fù)雜,但C++書中使用類C風(fēng)格的代碼寫法可能會讓讀者產(chǎn)生誤解,故在此提醒大家注意這一細(xì)節(jié),以免陷入不必要的困惑。
宇文聶15318806434: 在數(shù)據(jù)結(jié)構(gòu)鏈表中這樣定義的結(jié)構(gòu)體指針變量 L ,我的理解是:L 指向一個結(jié)點(diǎn), *L 表示就是一個結(jié)點(diǎn), -
新密市回轉(zhuǎn): ______ L->next 跟(*L).next完全相同.L是指針沒錯,*L是這個結(jié)構(gòu)體,(*L).next就是這個結(jié)構(gòu)體的next了,實(shí)際上就是這個結(jié)構(gòu)體下個結(jié)構(gòu)體的指針.
宇文聶15318806434: C語言 void Create - LinkList(LinkList &L) { }追問 -
新密市回轉(zhuǎn): ______ 結(jié)果確實(shí)這樣,但準(zhǔn)確的說,應(yīng)該是函數(shù)內(nèi)部用形參L做了具體操作,但形參L是局部變量函數(shù)調(diào)用完形參L將死亡,但由于傳值調(diào)用,實(shí)參的指針和形參L的指針值相同,這才導(dǎo)致實(shí)參的指針保留了函數(shù)內(nèi)部對形參L的操作.
宇文聶15318806434: C語言中Linklist * L和Linklist *& L有什么區(qū)別么?各表達(dá)什么..求大神幫助 -
新密市回轉(zhuǎn): ______ 一個指向的是L的地址,一個指向的是L地址的地址
宇文聶15318806434: LinkList *L和LinkList *&L ,ElemTye e 和ElemType &e -
新密市回轉(zhuǎn): ______ LinkList *L定義了一個LinkList指針LinkList *&L是指針的引用 如果L是個全局變量,通過參數(shù)傳給fun 如果一個函數(shù)fun(LinkList *L)里面改變了L的值,并不能影響到函數(shù)外L的值 如果一個函數(shù)fun(LinkList *&L)里面改變了L的值,函數(shù)外L的值也改變了,這是指針的引用ElemType e定義一個ElemType變量,ElemType &e定義一個ElemType類型引用,區(qū)別和上面一樣
宇文聶15318806434: 線性鏈表及其相關(guān)操作 求助!! -
新密市回轉(zhuǎn): ______ .c里面的內(nèi)容:#include “ex.h” int num; //num為功能列表的選項(xiàng) LinkList L=NULL; //創(chuàng)建鏈表表頭 L=(LinkList)malloc(sizeof(LNode)); if(!L) { printf("申請分配內(nèi)存失敗!"); exit(0); } L->next=NULL; //成功創(chuàng)建一個空鏈表頭節(jié)點(diǎn) printf(" ...
宇文聶15318806434: 定義一個單鏈表,linklist l,p=l,p是指向哪的,帶頭結(jié)點(diǎn) -
新密市回轉(zhuǎn): ______ 你想干什么呢.p指向的是單鏈表.如果是這種形式的話p=l.head,那么它指向的就是頭結(jié)點(diǎn).p=l.head->next那就是指向單鏈表中的第一個元素結(jié)點(diǎn).
宇文聶15318806434: C語言編寫一個插入刪除函數(shù) -
新密市回轉(zhuǎn): ______ 一般呢,插入和刪除函數(shù)是分開寫的,還有分成兩種存儲結(jié)構(gòu),1.順序表,2.鏈表,我給你一個我上數(shù)據(jù)結(jié)構(gòu)時候?qū)懙逆湵淼牟僮?里面全都有,如果不會用,追問我#include<stdio.h>#include<malloc.h>#include<Windows.h>#include<conio.h>...
宇文聶15318806434: 嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)中p29 status ListInsert - L(LinkList &L,int L,ElemType e),如何理解LinkList &L?
新密市回轉(zhuǎn): ______ 貌似沒問題: locatpos(L, i-1, h); //找到i-1,指針為h Makenode(s, e)) //表示創(chuàng)建值為e的節(jié)點(diǎn),指針為s Insfirst(h, s) //將s插入到h后面,即i的前面 你所擔(dān)心的,其實(shí)可以通過locatpos函數(shù)來實(shí)現(xiàn)
宇文聶15318806434: 建立鏈表時出現(xiàn) IntelliSense: 不允許使用不完整的類型 錯誤提示 -
新密市回轉(zhuǎn): ______ void CreateList(LinkList * &L, StaffBill a[], int n) //尾插法建鏈表L 這里的第二個參數(shù)是這個結(jié)構(gòu)體數(shù)組,所以在實(shí)際調(diào)用過程中應(yīng)該以數(shù)組名來作為實(shí)參即main函數(shù)中調(diào)用時 直接寫成 CreateList(L, Info, 3)即可;此處你定義的結(jié)構(gòu)體數(shù)組就三個數(shù)...
宇文聶15318806434: del - LinkList(L,i)是什么意思是什么意思 請?jiān)敿?xì)說明 謝謝 -
新密市回轉(zhuǎn): ______ 數(shù)據(jù)結(jié)構(gòu)中的鏈表,del_linklist是該鏈表的名稱,可用其他字母單詞代替,(L,i)表示鏈表L的元素的i位置,
接下來,讓我們探討為什么會有這樣的寫法及其用途。當(dāng)函數(shù)的參數(shù)是linklist &L時,意味著在函數(shù)內(nèi)部使用的L將直接引用外部的L變量,類似于全局變量的作用。這意味著,修改函數(shù)中的L實(shí)際上會直接影響到主函數(shù)中的L的值。這種情況下,如果L的值需要發(fā)生變化,例如在執(zhí)行不帶頭結(jié)點(diǎn)的頭插法建立單鏈表等操作時,我們應(yīng)當(dāng)傳遞形參linklist &L;相反,如果L的值不需要變化,比如在查詢鏈表值等場景,則只需傳遞linklist L即可。
為了更直觀地理解這一點(diǎn),我們可以將傳入linklist &L視為將L作為全局變量的引用使用。在函數(shù)內(nèi)部,L的值可以直接修改,而不會影響到外部作用域中的L。然而,需要注意的是,盡管L在這里扮演了全局變量的角色,但它本身并沒有任何特殊之處,只是作為一個普通的全局變量來處理。當(dāng)在函數(shù)中將L的值賦給了另一個變量,如linklist p = L,此時得到的p只是L的一個副本。因此,修改p的值不會影響到L的值。
綜上所述,linklist &L的使用實(shí)際上是一種將局部變量與全局變量進(jìn)行等效處理的方法,通過傳遞引用而非復(fù)制,實(shí)現(xiàn)數(shù)據(jù)在函數(shù)內(nèi)部的高效訪問與修改。這一特性在C++中被廣泛利用,但在理解其原理時,應(yīng)區(qū)分C++與C語言的語法差異。對于這個問題,其解答并不復(fù)雜,但C++書中使用類C風(fēng)格的代碼寫法可能會讓讀者產(chǎn)生誤解,故在此提醒大家注意這一細(xì)節(jié),以免陷入不必要的困惑。
相關(guān)評說:
新密市回轉(zhuǎn): ______ L->next 跟(*L).next完全相同.L是指針沒錯,*L是這個結(jié)構(gòu)體,(*L).next就是這個結(jié)構(gòu)體的next了,實(shí)際上就是這個結(jié)構(gòu)體下個結(jié)構(gòu)體的指針.
新密市回轉(zhuǎn): ______ 結(jié)果確實(shí)這樣,但準(zhǔn)確的說,應(yīng)該是函數(shù)內(nèi)部用形參L做了具體操作,但形參L是局部變量函數(shù)調(diào)用完形參L將死亡,但由于傳值調(diào)用,實(shí)參的指針和形參L的指針值相同,這才導(dǎo)致實(shí)參的指針保留了函數(shù)內(nèi)部對形參L的操作.
新密市回轉(zhuǎn): ______ 一個指向的是L的地址,一個指向的是L地址的地址
新密市回轉(zhuǎn): ______ LinkList *L定義了一個LinkList指針LinkList *&L是指針的引用 如果L是個全局變量,通過參數(shù)傳給fun 如果一個函數(shù)fun(LinkList *L)里面改變了L的值,并不能影響到函數(shù)外L的值 如果一個函數(shù)fun(LinkList *&L)里面改變了L的值,函數(shù)外L的值也改變了,這是指針的引用ElemType e定義一個ElemType變量,ElemType &e定義一個ElemType類型引用,區(qū)別和上面一樣
新密市回轉(zhuǎn): ______ .c里面的內(nèi)容:#include “ex.h” int num; //num為功能列表的選項(xiàng) LinkList L=NULL; //創(chuàng)建鏈表表頭 L=(LinkList)malloc(sizeof(LNode)); if(!L) { printf("申請分配內(nèi)存失敗!"); exit(0); } L->next=NULL; //成功創(chuàng)建一個空鏈表頭節(jié)點(diǎn) printf(" ...
新密市回轉(zhuǎn): ______ 你想干什么呢.p指向的是單鏈表.如果是這種形式的話p=l.head,那么它指向的就是頭結(jié)點(diǎn).p=l.head->next那就是指向單鏈表中的第一個元素結(jié)點(diǎn).
新密市回轉(zhuǎn): ______ 一般呢,插入和刪除函數(shù)是分開寫的,還有分成兩種存儲結(jié)構(gòu),1.順序表,2.鏈表,我給你一個我上數(shù)據(jù)結(jié)構(gòu)時候?qū)懙逆湵淼牟僮?里面全都有,如果不會用,追問我#include<stdio.h>#include<malloc.h>#include<Windows.h>#include<conio.h>...
新密市回轉(zhuǎn): ______ 貌似沒問題: locatpos(L, i-1, h); //找到i-1,指針為h Makenode(s, e)) //表示創(chuàng)建值為e的節(jié)點(diǎn),指針為s Insfirst(h, s) //將s插入到h后面,即i的前面 你所擔(dān)心的,其實(shí)可以通過locatpos函數(shù)來實(shí)現(xiàn)
新密市回轉(zhuǎn): ______ void CreateList(LinkList * &L, StaffBill a[], int n) //尾插法建鏈表L 這里的第二個參數(shù)是這個結(jié)構(gòu)體數(shù)組,所以在實(shí)際調(diào)用過程中應(yīng)該以數(shù)組名來作為實(shí)參即main函數(shù)中調(diào)用時 直接寫成 CreateList(L, Info, 3)即可;此處你定義的結(jié)構(gòu)體數(shù)組就三個數(shù)...
新密市回轉(zhuǎn): ______ 數(shù)據(jù)結(jié)構(gòu)中的鏈表,del_linklist是該鏈表的名稱,可用其他字母單詞代替,(L,i)表示鏈表L的元素的i位置,