用函數(shù)給結(jié)構(gòu)體成員賦值?如何設(shè)計(jì)具有靈活性的函數(shù)
各位老鐵們好,相信很多人對(duì)用函數(shù)給結(jié)構(gòu)體成員賦值?如何設(shè)計(jì)具有靈活性的函數(shù)都不是特別的了解,因此呢,今天就來(lái)為大家分享下關(guān)于用函數(shù)給結(jié)構(gòu)體成員賦值?如何設(shè)計(jì)具有靈活性的...
各位老鐵們好,相信很多人對(duì)用函數(shù)給結(jié)構(gòu)體成員賦值?如何設(shè)計(jì)具有靈活性的函數(shù)都不是特別的了解,因此呢,今天就來(lái)為大家分享下關(guān)于用函數(shù)給結(jié)構(gòu)體成員賦值?如何設(shè)計(jì)具有靈活性的函數(shù)以及能不能在函數(shù)中給結(jié)構(gòu)體中的值賦值的問(wèn)題知識(shí),還望可以幫助大家,解決大家的一些困惑,下面一起來(lái)看看吧!
文章目錄:
- 1、c++可以通過(guò)函數(shù)直接給結(jié)構(gòu)體數(shù)組賦值嗎?
- 2、結(jié)構(gòu)體變量賦值方法?
- 3、關(guān)于c語(yǔ)言結(jié)構(gòu)體變量成員引用的問(wèn)題
- 4、請(qǐng)問(wèn)結(jié)構(gòu)體數(shù)組賦值的方法?具體看下面
- 5、在c語(yǔ)言標(biāo)準(zhǔn)中結(jié)構(gòu)體之間是否可以直接賦值?
c++可以通過(guò)函數(shù)直接給結(jié)構(gòu)體數(shù)組賦值嗎?
結(jié)構(gòu)體在C語(yǔ)言中用于組合多個(gè)數(shù)據(jù)類型,它們能夠存放不同或相同類型的多個(gè)數(shù)據(jù)。在定義結(jié)構(gòu)體之后,可以通過(guò)初始化結(jié)構(gòu)體變量或使用結(jié)構(gòu)體數(shù)組來(lái)操作它們。結(jié)構(gòu)體定義只表示一種類型,并沒(méi)有為結(jié)構(gòu)體成員分配實(shí)際內(nèi)存空間。因此,直接對(duì)結(jié)構(gòu)體進(jìn)行賦值是不正確的。
從結(jié)果可以看出,C語(yǔ)言中結(jié)構(gòu)體的直接賦值是可行的。我們可以通過(guò)查看struct_assign()函數(shù)的匯編實(shí)現(xiàn),從底層了解C語(yǔ)言是如何實(shí)現(xiàn)兩個(gè)結(jié)構(gòu)體之間的賦值操作的。這段匯編比較簡(jiǎn)單,由于結(jié)構(gòu)體的對(duì)齊特性,sizeof(struct Foo)為16,通過(guò)四次movl操作將foo1的結(jié)構(gòu)體內(nèi)容拷貝到結(jié)構(gòu)體foo2中。
printf(%d,%s\n,bao.id,bao.name);//輸出是4224528,空(應(yīng)該是null)//structstudentao={3,123};可以。
結(jié)構(gòu)體數(shù)組指針作為函數(shù)參數(shù),通過(guò)數(shù)組的首與偏移量對(duì)結(jié)構(gòu)體數(shù)組進(jìn)行scanf的賦值,在函數(shù)中通過(guò)指針間接訪問(wèn)到其指向的內(nèi)存。
C語(yǔ)言只有在定義字符數(shù)組的時(shí)候才能用“=”來(lái)初始化變量,其它情況下是不能直接用“=”來(lái)為字符數(shù)組賦值的,要為字符數(shù)組賦值可以用string.h頭文件中的strcpy函數(shù)來(lái)完成。
結(jié)構(gòu)體變量賦值方法?
按字符賦值。如結(jié)構(gòu)體變量為a,成員為字符數(shù)組s[10];那么可以 for(i=0;i10;i++)a.s[i]=xxx;xxx可以是任意字符。比如getchar(),即從終端讀取。2用strcpy賦值。如 strcpy(a.s,test);就是將字符數(shù)組賦值為test。3用memcpy賦值。
可以將一個(gè)結(jié)構(gòu)體變量的值賦給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。如student1和student2都是student類型的變量,可以這樣賦值:student1= student2;假設(shè)申明了兩個(gè)成員列表完全一樣的兩個(gè)結(jié)構(gòu)體,編譯器會(huì)當(dāng)作兩個(gè)完全不同的類型,即使他們的成員列表是一樣的,令兩個(gè)結(jié)構(gòu)體的變量間賦值,則是的。
結(jié)構(gòu)體變量直接賦值,就是其本身內(nèi)存空間,按照分布直接賦值。所以兩個(gè)一樣的結(jié)構(gòu)變量可以直接賦值。但是如果結(jié)構(gòu)成員中有指針,且指針指向的大小不一樣,是不能直接賦值的。
結(jié)構(gòu)體和變量之間幅值要通過(guò)成員運(yùn)算符來(lái)進(jìn)行。
引用結(jié)構(gòu)體變量中成員的一般方式為結(jié)構(gòu)體變量名.成員名例如可以這樣對(duì)變量的成員賦值:studentnum=10010; (3) 如果成員本身也是一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低一級(jí)的成員。
關(guān)于c語(yǔ)言結(jié)構(gòu)體變量成員引用的問(wèn)題
1、、與(2)類似,是指針間的賦值,必須保證左右操作數(shù)的指針類型是一致的。由于n是結(jié)構(gòu)體sk的第一個(gè)變量,因此其與結(jié)構(gòu)體變量相同,可以轉(zhuǎn)換得到正確的。(4)、c是一個(gè)二維數(shù)組,p是一個(gè)指向數(shù)組的指針,因此p的*運(yùn)算都是得到一個(gè)數(shù)組,**運(yùn)算才能取到數(shù)組中的值。
2、如果結(jié)構(gòu)體中的成員均為一般變量(包括結(jié)構(gòu)體變量),則使用“.”,如果成員變量為指針(不管指向什么,包括結(jié)構(gòu)體),則使用“-”。
3、答選D,scanf語(yǔ)句中的輸入項(xiàng)列表應(yīng)該存放的是,x,age是整型變量,里面保存的是內(nèi)容,所以需要加取符&,所以BC正確 D錯(cuò)誤 至于A正確的原因是name是一個(gè)字符串?dāng)?shù)組,name本身指向這個(gè)數(shù)組首。name里保存的本身就是個(gè)。
4、你在前面定義結(jié)構(gòu)體時(shí)應(yīng)該把name定義為一個(gè)字符型數(shù)組,如char name[10];因?yàn)樾彰怯米址硎镜摹?/p>
請(qǐng)問(wèn)結(jié)構(gòu)體數(shù)組賦值的方法?具體看下面
intmain(void){ structstudentao={};printf(%d,%s\n,bao.id,bao.name);//輸出是4224528,空(應(yīng)該是null)//structstudentao={3,123};可以。
按字符賦值。如結(jié)構(gòu)體變量為a,成員為字符數(shù)組s[10];那么可以 for(i=0;i10;i++)a.s[i]=xxx;xxx可以是任意字符。比如getchar(),即從終端讀取。2用strcpy賦值。如 strcpy(a.s,test);就是將字符數(shù)組賦值為test。3用memcpy賦值。
用字符常量逐個(gè)初始化數(shù)組。例如:char a[8]={i,l,o,v,e,y,o,u};把8個(gè)字符依次分別賦給c[0]~c[7]這8個(gè)元素。如果在定義字符數(shù)組時(shí)不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)料的。
在定義的時(shí)候初始化。把這個(gè)數(shù)組再放到一個(gè)內(nèi)部結(jié)構(gòu)體中,這樣就可以一次性賦值。例如:struct { struct { int a[20];} aa;int c;} b,d;b.aa=d.aa//將d中的a數(shù)組到b中的a數(shù)組。
結(jié)構(gòu)體數(shù)組指針作為函數(shù)參數(shù),通過(guò)數(shù)組的首與偏移量對(duì)結(jié)構(gòu)體數(shù)組進(jìn)行scanf的賦值,在函數(shù)中通過(guò)指針間接訪問(wèn)到其指向的內(nèi)存。
在c語(yǔ)言標(biāo)準(zhǔn)中結(jié)構(gòu)體之間是否可以直接賦值?
1、結(jié)構(gòu)體定義只表示一種類型,并沒(méi)有為結(jié)構(gòu)體成員分配實(shí)際內(nèi)存空間。因此,直接對(duì)結(jié)構(gòu)體進(jìn)行賦值是不正確的。例如,定義一個(gè)名為“Tea”的結(jié)構(gòu)體,它僅僅是一種類型,無(wú)法直接對(duì)成員進(jìn)行賦值。結(jié)構(gòu)體數(shù)組則是一個(gè)數(shù)組,其中每個(gè)元素都是結(jié)構(gòu)體類型。數(shù)組元素的賦值與普通數(shù)組相同。
2、從結(jié)果可以看出,C語(yǔ)言中結(jié)構(gòu)體的直接賦值是可行的。我們可以通過(guò)查看struct_assign()函數(shù)的匯編實(shí)現(xiàn),從底層了解C語(yǔ)言是如何實(shí)現(xiàn)兩個(gè)結(jié)構(gòu)體之間的賦值操作的。這段匯編比較簡(jiǎn)單,由于結(jié)構(gòu)體的對(duì)齊特性,sizeof(struct Foo)為16,通過(guò)四次movl操作將foo1的結(jié)構(gòu)體內(nèi)容拷貝到結(jié)構(gòu)體foo2中。
3、所以兩個(gè)一樣的結(jié)構(gòu)變量可以直接賦值。但是如果結(jié)構(gòu)成員中有指針,且指針指向的大小不一樣,是不能直接賦值的。
4、可以的,但需要保證是具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量??梢詫⒁粋€(gè)結(jié)構(gòu)體變量的值賦給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。
文章分享結(jié)束,用函數(shù)給結(jié)構(gòu)體成員賦值?如何設(shè)計(jì)具有靈活性的函數(shù)和能不能在函數(shù)中給結(jié)構(gòu)體中的值賦值的答案你都知道了嗎?歡迎再次光臨本站哦!
本文鏈接:http:///bian/226217.html