1樓:網友
struct中成員name是指標型別,a在被複制給b的時候,賦值過去的是指標,所以a和b是共享同乙個值的,b的name被賦值為qian,a中同樣改變的(這麼說不太準確,並不是同樣改變,你可以理解為a和b中的name都是同乙個)
c語言,為何a.name為qian
2樓:網友
注意這裡是淺拷貝,即b和a的name公用一塊位址空間,對b的name的值更改,實際上也影響了的值。
關於c語言,為什麼這道題a.name是qian不是zhao??
3樓:風若遠去何人留
關鍵在於b=a這句。
當b=a的時候 其實做的是。
可以看到,並沒有單獨開闢空間,而是直接賦值為也就是說,這時和共用的同一段記憶體,即之前malloc的10個位元組。
於是後續對賦值(strcpy),就同樣改變了的值。
c語言結構體變數的題,為什麼a結構體中name被修改為qian?
4樓:網友
要想知道為什麼,你得深刻地理解b=a;這條賦值語句,這條語句的含義是a的成員依次賦值給b對應的成員,a中第乙個成員是name,型別是char*。在賦值時,只是將a中name的位址值賦給b中的name,也就是說和指向的是同乙個位址空間!
a.name 為什麼不是zhao是qian
5樓:匿名使用者
在執行b=a; 這一句的時候,實際是:
/注意這裡。,它們都指向(char *)malloc(10) 分配的那段記憶體,是同乙個位置。
strcpy(, "zhao"); 把字串。
zhao"拷貝到這段記憶體,但之後。
strcpy(, "qian"); 則又把"qian"拷貝到這段記憶體,覆蓋掉了前面的資料,所以最後。
和都是qian
你要知道name欄位是乙個指標,結構體。
變數建立時指標本身的記憶體已經分配了,但它指向的記憶體還沒有分配。
至於gender和score欄位,它們在結構體變數建立時就分配了獨立的記憶體,不會互相覆蓋。
要想和互不影響,應該再執行。
即給也分配獨立的記憶體。
這道題的正確答案,我猜是d) qian,m,290,qian,f,350
圖中c語言程式 a中的name明明在程式第12行變成了zhao 為什麼解析裡說是qian?
6樓:網友
你中間有乙個b=a的操作,因為name這些都是指標型別,你相當於b指向了a的位址了,a和b公用乙個記憶體位址,所以b的值改變了,伴隨著a的值也發生了變化。
求解c語言結構體,最後答案中,a結構體中name為何被修改為qian,在哪個語句修改的
7樓:rts神作
在 b = a 這句,此句把的值給了,注意它們都是位址,也就是說沒有給的指向單獨再開闢一塊記憶體,而是和共指向一塊記憶體,所以改了所指向的內容的位址,也就是改了所指向的內容的值 太繞了。。。
d選項是qian,m,290,qian,f,350搞不懂,為什麼選它呢,c語言
8樓:網友
上面有一句b = a,這句完了之後, = ,就是說用的是所malloc出來的位址空間,兩個指標指向的是同一塊位址。
而在strcpy(,"qian")之後,等於把裡面的"zhao"給改掉了。
9樓:緩緩掉落的松針
你好,你還問了乙個同樣的問題吧!
c語言中關於指標的問題?
10樓:劉文正粉絲
qian, m, 290qian, f, 350
我都不明白,這是乙個正確的**,你為啥不自己編譯一次呢?
11樓:
你肯定編譯過不了,「b = a」 是會報錯的。兩個結構體之間怎麼可能這樣寫。
c語言for迴圈語句,c語言中for語句是怎麼用的
當m 1的時候 就進入第二個迴圈 此時的m經過 後就等於2 當第二個迴圈的n累加到k的時候,就跳出第二個迴圈 返回第乙個迴圈這時m 2,進入第二個迴圈n又重0開始,當n累加到k的時候又會返回到第乙個迴圈的了 一直如此迴圈下去 直到m也累加到k的時候整個迴圈都會推出的了 a為啥要從0開始,那就只有從這...
c語言什麼是遞迴方法,C語言什麼是遞迴方法?
程式設計裡面估計最讓人摸不著頭腦的基本演算法就是遞迴了。很多時候我們看明白乙個複雜的遞迴都有點費時間,尤其對模型所描述的問題概念不清的時候,想要自己設計乙個遞迴那麼就更是有難度了。今天我也花費了半個小時來搞明白二叉樹的平衡性的遞迴模型,首先我不明白什麼叫做平衡性,所以花費的時候大部分實在試探理解平衡...
VB可以和c語言同時學嗎? 是學c語言還是c 好
現在都學c不學vb,c 好,做軟體的需求這個方面的知識。學習完了vb,準備學c,學c語言還是c 好?一門語言是不可能學完的,選擇適合自己的,自己用起來舒服的就行了。我已經會vb,想再繼續學c。是先學習c語言還是先學c 好呢?如果你直接學c 就錯過了很多東西。雖然c 相容c,但是那部分是乙個做計算機都...