1樓:桓暉微生紫雲
swap(int
pt1,int
pt2)int
temp;temp=pt1;
pt1=pt2;
pt2=temp;
因為第二種的指標temp沒有初始化是不對的。
也就像樓陵帆上說的,它們只改位址的位置,不改變內容。可是,像掘餘我上面說的判汪滾。最後沒有初始化temp也是種錯誤。
2樓:箕拔書蔓
呵呵,好問題,也是一般書比較少講解的。
答案是:函式傳遞引數其實只有一返談種:傳值薯渣。
swap()函式內的pt1
pt2其實是在swap內部臨時生成的,然後複製的傳入的。
pt1pt2
的值給它,所以,這時,其實有2個pt1指向乙個記憶體位址,2個pt2指漏手碰向另乙個記憶體位址。
3樓:甘衣粘燁燁
第二中寫法。
voidswap(int
pt1,int
pt2)int
temp;temp
pt1;pt1
pt2;pt2
temp;只是改變了pt1
pt2兩個指標所指的位置,沒有慶返改變他們所指的內容。
在呼叫swap(q1,q2)這個函式時,首先做的是複製引數,可以理納差老解為。
pt1q1;
pt2q2;
這樣。無論怎麼改變pt1
pt2他們指標的位洞公升置。
也不會影響到q1q2。
c語言指標易錯問題【附圖+高分】
4樓:網友
搞it的人,都是夜貓子啊。。
1.這個題和你前面的提問,都是關於指標的問題,因為指標太靈活,你可以畫個跳轉圖來標記每個指標指向的內容,這樣就好理解了。
2.任何變數都需要有儲存空間,每個儲存空間對應乙個儲存位址,比如指標p,即p有乙個儲存位址,該儲存位址對應的儲存空間放的是p指向的位址;
3.*p表示p是個指標,即p的值是個位址,該位址指向乙個字串(姑且這樣說),*k表示k是個指向指標的指標,即k的值也是乙個位址,但是該位址指向的還是乙個位址;
表示將a的儲存位址賦給了p,此時p的儲存空間放的是陣列a的首位址;k=&p,表示將指標p的儲存位址賦給了k;
5.*(p++)的意思是,先用p,後執行p自加操作,所以第乙個printf輸出的實質上是*p的值,不言而喻,輸出的結果是2;
6.第二個printf:前面說過,k存放的是指標p的儲存位址,那麼*k就是p的儲存空間內容(p的儲存空間存放的是陣列a的位址,但是注意,此時p的值已經加1了,也就是p指向了陣列a的第二個元素),因此*(*k)就是陣列a的第二個元素,結果就是輸出4;
5樓:網友
的意思是 先用後加 所以printf("%d",*(p++)顯示*p的值 。但在顯示之後 p已自加1
k 是定義乙個型別為int*的*k指標; k=&p即k等於p的位址,所以*k等於p的值 , 而p的值是a的位址。所以*k的值等於a的位址,那麼**k(可以看成 *(k))就a的位址的值 即2,但之前有p++操作 所以是4
6樓:網友
其實主要是乙個運算子的優先順序和結合性的問題。
與++優先順序一樣,其結合性自右向左。當*和++出現在運算元p的兩邊時,從右開始,++先與p作用,具體步驟:
第二個中有兩個**那表明是指標的指標**k相當於是*(*看)括號中的部分是p的值即a的位址值,a的位址值再加乙個*則就是a的值了。
呵呵,要是不對,別見怪啊。
7樓:網友
第乙個printf中*(p++)是先對p解除引用再運算p++ 所以結果是2
如果是*(+p)結果就是4
第二個printf中k是指向指標p的指標 所以要想得到k位址的內容必須使用兩次解除引用。
這兩種多肉植物叫什麼這兩種多肉植物分別叫什麼
紫珍珠 echeveria perle von n rnberg 景天科擬石蓮花屬的多肉植物 別稱是紐倫堡珍珠。紫羅蘭色的葉片使得這個品種具有非常強的觀賞性。一種擁有美麗的粉紫色葉片的多肉植物,葉緣呈白色。葉片呈蓮座形螺旋排列。中文學名 紫珍珠拉丁學名 echeveria perle von n r...
請問這兩種是什麼植物和花,請問這兩種是什麼植物和花呢?
你好,麻煩發 植物 plants 是生物界中的一大類。一般有葉綠素,沒有神經,沒有感覺。分藻類 菌類 蕨類和種子植物,種子植物又分為裸子植物和被子植物。有30多萬種。請問這兩種是什麼植物和花呢?請問這兩種花植物分別叫做什麼?只看到一張 金縷梅科 紅花繼木 還有呢?我只看到紅花檵木。這兩種是什麼植物?...
請問這兩種多肉叫什麼名字呀,這兩種多肉分別叫什麼名字
第一個我看著像香草,香草是勞爾和靜夜的雜交,白牡丹是朧月和靜夜雜交,所以他們幾個很像。第二個確實像薄毛萬年草 第一盆是白牡丹,葉片肥厚,平常為白色,日照增加後,葉尖和葉邊會變為粉紅色。第二盆是薄毛萬年草,葉片上有很多小絨毛,喜歡日照。這兩種多肉分別叫什麼名字 這兩張應該是一個品種的,叫魯氏石蓮 第一...