新聞中心
c語(yǔ)言中用結(jié)構(gòu)體的實(shí)例當(dāng)做函數(shù)的參數(shù)是什么形式傳入的
參數(shù)的傳入分為兩種形式:值傳遞和地址傳遞。如果把實(shí)例本身作為參數(shù)傳到函數(shù)里面去,那么在函數(shù)里面實(shí)際上是另外產(chǎn)生一個(gè)臨時(shí)的實(shí)例,其值和函數(shù)外部的那個(gè)實(shí)例一樣,當(dāng)然在函數(shù)內(nèi)部對(duì)其做的一些改動(dòng)是不會(huì)影響到外邊的實(shí)例的,因?yàn)榫筒皇峭粋€(gè)東西。當(dāng)然如果在函數(shù)里不是想去改變什么而只是單純的計(jì)算一些東西還是沒(méi)問(wèn)題的,不過(guò)在內(nèi)存中的地址之類(lèi)的當(dāng)然是不一樣的。。。傳指針也就是把地址傳進(jìn)去,那么在函數(shù)里對(duì)該地址中的數(shù)據(jù)進(jìn)行操作,當(dāng)然就是在外部實(shí)例本身上面進(jìn)行修改了

汝州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
有關(guān)C語(yǔ)言中結(jié)構(gòu)體變量做函數(shù)參數(shù)的問(wèn)題
其實(shí),結(jié)構(gòu)名就是一個(gè)變量,由于你的形參和你的實(shí)參取名是一樣的。而且對(duì)于形參肯定會(huì)變
實(shí)參不會(huì)變。所以,你中間的maxA變量,其實(shí)是子函數(shù)的形參變了。但是你的實(shí)參沒(méi)變
因此結(jié)果沒(méi)變
改,對(duì)于子函數(shù)中,你在void Max_Element_Find(struct Max_Element* maxA,double *A,int n)
Max_Element_Find(maxA,A,n);這樣就好了
C語(yǔ)言中,結(jié)構(gòu)體作為函數(shù)參數(shù)傳遞,詳解?
1.可以把結(jié)構(gòu)體作為參數(shù)啊,
2.不去取地址的意思,是引用的意思,函數(shù)執(zhí)行時(shí)修改L的值,就直接的修改了實(shí)參的值,相當(dāng)于地址傳遞了。
3.真正調(diào)用的時(shí),如下:
SqList
tempStruct;
InitList_Sq(tempStruct)
這樣就可以了。
呵呵
c語(yǔ)言問(wèn)題,在調(diào)用函數(shù)時(shí)可以將結(jié)構(gòu)體變量作為實(shí)參傳給函數(shù)這句話(huà)為什么錯(cuò)?不能傳回實(shí)參,這句話(huà)沒(méi)錯(cuò)吧
可以將結(jié)構(gòu)體變量作為實(shí)參傳給函數(shù)的。這句沒(méi)錯(cuò)
具體是否可以傳回實(shí)參,要看情況。
比如 如果結(jié)構(gòu)體里面包含的是值 struct A{int a;}
那么在函數(shù)中對(duì)參數(shù)m做m.a的改變, 不會(huì)影響實(shí)參。
如果結(jié)構(gòu)體里面包含的是指針,比如 struct A {char *s;}
形參為m的情況下,如果賦值m.s=xxxx 那么不會(huì)影響實(shí)參
但如果用strcpy(m.s, "xxxxx"); 就會(huì)影響實(shí)參。 因?yàn)閷?shí)參和形參的s是同一個(gè)地址。
C 語(yǔ)言關(guān)于結(jié)構(gòu)體做參數(shù)傳遞?
雙指針
C語(yǔ)言結(jié)構(gòu)體傳參
?
小-黯
原創(chuàng)
關(guān)注
7點(diǎn)贊·2315人閱讀
目錄
C語(yǔ)言結(jié)構(gòu)體傳參
1. 普通傳參
1.1 測(cè)試代碼
1.2 測(cè)試結(jié)果
1.3 結(jié)果分析
2. 單指針傳參
2.1 修改結(jié)構(gòu)體數(shù)據(jù)
2.1.1 測(cè)試代碼
2.1.2 測(cè)試結(jié)果
2.1.3 結(jié)果分析
2.2 修改結(jié)構(gòu)體地址
2.2.1 測(cè)試代碼
2.2.2 測(cè)試結(jié)果
2.2.3 結(jié)果分析
3. 雙指針傳參
3.1 測(cè)試代碼
3.2 測(cè)試結(jié)果
3.2 結(jié)果分析
C語(yǔ)言結(jié)構(gòu)體傳參
結(jié)構(gòu)體傳參包括三種傳參方式
普通傳參:函數(shù)接收到結(jié)構(gòu)體參數(shù)后,會(huì)復(fù)制一份原來(lái)的結(jié)構(gòu)體作為形參供函數(shù)使用,而函數(shù)內(nèi)的任何操作都是對(duì)拷貝結(jié)構(gòu)體的修改,不會(huì)影響到原本的結(jié)構(gòu)體變化。
單指針傳參:函數(shù)接收的是一個(gè)結(jié)構(gòu)體的地址,該指針指向的是結(jié)構(gòu)體起始地址,也就相當(dāng)于傳入了結(jié)構(gòu)體內(nèi)所有變量的地址,函數(shù)接收到該結(jié)構(gòu)體指針后,我們就可以根據(jù)地址訪(fǎng)問(wèn)結(jié)構(gòu)體中每個(gè)變量的真實(shí)數(shù)據(jù),在函數(shù)內(nèi)對(duì)結(jié)構(gòu)體內(nèi)數(shù)據(jù)的操作,都會(huì)影響到原本結(jié)構(gòu)體內(nèi)數(shù)據(jù)的變化
雙指針傳參:函數(shù)接收的是結(jié)構(gòu)體指針變量的地址,因?yàn)橐患?jí)指針代表的是結(jié)構(gòu)體的地址,在函數(shù)中能夠操作結(jié)構(gòu)體內(nèi)的數(shù)據(jù),則二級(jí)指針指向的是結(jié)構(gòu)體的地址,則同理我們可以根據(jù)二級(jí)指針訪(fǎng)問(wèn)修改結(jié)構(gòu)體的地址
即通過(guò)一級(jí)指針,對(duì)結(jié)構(gòu)體內(nèi)數(shù)據(jù)的操作會(huì)影響到原本結(jié)構(gòu)體內(nèi)數(shù)據(jù)的變化
而通過(guò)二級(jí)指針,對(duì)結(jié)構(gòu)體地址的操作會(huì)影響到原本結(jié)構(gòu)體地址的變化,例如為結(jié)構(gòu)體分配空間
關(guān)于c語(yǔ)言中的結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)傳遞的
1、結(jié)構(gòu)體數(shù)組傳給指針,實(shí)質(zhì)上是不可能的,本質(zhì)上傳的是數(shù)組首地址,根據(jù)偏移來(lái)操作數(shù)組,這樣看起來(lái)好像是真在操作數(shù)組一樣。就和普通指針一樣使用,只不過(guò)它是結(jié)構(gòu)體數(shù)組。
2、例程:
typedef?struct?Student
{
char?name[10]?;
int?age?;
}Student;
#define?LEN?10?
//print?all?Student?infomation
void?fun(Student?*pStu,int?len)
{
int?i?;?
for(i?=?0?;i??len?;++i)
{
printf("%s\t%d",pStu[i].name,pStu[i].age)?;
}
}
int?main?()
{
Student?stu[LEN]?;
fun(stu,LEN)?;
}
本文題目:C語(yǔ)言結(jié)構(gòu)體與函數(shù)傳參 c語(yǔ)言結(jié)構(gòu)體數(shù)組傳參
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/doddoch.html


咨詢(xún)
建站咨詢(xún)
