當前位置:首頁 » 編程語言 » 結構體與函數C語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

結構體與函數C語言

發布時間: 2023-04-02 07:32:21

c語言結構體函數

STUf(STUa)
{STUb={"Zhao",'m',85,90};
inti;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)a.score[i]=b.score[i];
以上是將b中的數據賦值給a,相當於a=b;這樣的一個操作
returna;
}
main()
{STUc={"Qian",'f',95,92},d;
d=f(c);//這里傳的c是個復製品(傳遞的不是結構體指針),所以c不會變,d接收f()函數的返回值,因為返回值的內容是f()中的b的值,所以,d與c不同
printf("%s,%c,%d,%d,",d.name,d.sex,d.score[0],d.score[1]);
printf("%s,%c,%d,%d ",c.name,c.sex,c.score[0],c.score[1]);
}
輸出結果為:A)Zhao,m,85,90,Qian,f,95,92

⑵ C語言結構體類似函數嗎

一、你所發來的圖中,struct vote *create()這一句確實是一個函數!
二、它不是結構體,結構體定義語句沒有括弧,如:
struct vote
{
int a;
char name[20];
float score[3];
};
三、struct vote *create() 這條語句解釋,
剛說它是一個函數,其中:
函數名:create
函數的參數:無
函數的返回值類型:是struct vote * 型,即返回值是指向結構體vote類型的指針。
四、最後回到你的疑問:
1、C語言結構體類似函數嗎? 不是。
2、如圖,struct vote *create(); 這語句算是調用函數嗎?不是調用函數,而是定義函數。
3、如果算的話括弧內不用形參之類的嗎?既然是定義函數,括弧內可以用形參,當然也可以選擇不用形參。你發的例子就是不用參數的函數。
還有不明白之處,請留言。

⑶ 在c語言中 函數和結構體的區別

一個程序通常圍繞這兩個方面進行:數據存儲和數據操作;
結構體是一種數據類型,用來將不同類型的數據組合在一起,決定數據的存儲問題(比如在內存佔多大的空間來,系統怎麼解釋存儲數據的位數據啦等等)同int, double 等編譯器內置的數據類型基本相同,只不過結構體是用戶自己定義的數據類型而已,例如:
struct student

char name[20];
int NO;
};
函數是對數據的一種操作;

⑷ C語言——結構體/函數

#include<stdio.h>
#include<string.h>

#defineN(5)

structSTUDENT
{
charname[20];
intage;
floatchinese,math;
};

voidscan(structSTUDENT*a,intn);
voidprint(structSTUDENT*a,intn);

voidsort(void*a,intn,intsize,int(*cmp)(void*,void*));
intcmp_score(void*a,void*b);
intcmp_chinese(void*a,void*b);
intcmp_name(void*a,void*b);

intmain()
{
structSTUDENTa[N];
inti;
scan(a,N);
sort(a,N,sizeof(*a),cmp_score);
print(a,N);
sort(a,N,sizeof(*a),cmp_chinese);
print(a,N);
sort(a,N,sizeof(*a),cmp_name);
print(a,N);
return0;
}

voidscan(structSTUDENT*a,intn)
{
inti;
for(i=0;i<n;++i)
{
scanf(" %s%d%f%f",a[i].name,&a[i].age,&a[i].chinese,&a[i].math);
}
}

voidprint(structSTUDENT*a,intn)
{
inti;
for(i=0;i<n;++i)
{
printf("%s%d%f%f ",a[i].name,a[i].age,a[i].chinese,a[i].math);
}
}

voidsort(void*a,intn,intsize,int(*cmp)(void*,void*))
{
inti,j;
void*t=malloc(size);
for(i=0;i<n-1;++i)
{
for(j=0;j<n-i-1;++j)
{
if(cmp(a+size*j,a+size*(j+1)))
{
memcpy(t,a+size*j,size);
memcpy(a+size*j,a+size*(j+1),size);
memcpy(a+size*(j+1),t,size);
}
}
}
free(t);
}

intcmp_score(void*a,void*b)
{
return((structSTUDENT*)a)->chinese+((structSTUDENT*)a)->math<((structSTUDENT*)b)->chinese+((structSTUDENT*)b)->math;
}

intcmp_chinese(void*a,void*b)
{
return((structSTUDENT*)a)->chinese<((structSTUDENT*)b)->chinese;
}

intcmp_name(void*a,void*b)
{
returnstrcmp(((structSTUDENT*)a)->name,((structSTUDENT*)b)->name)>0;
}

⑸ c語言中,如何在結構體中實現函數的功能

c語言的結構體是一組數據的組合,並不是簡單的單一類型。所以在查找和輸出的時候,均不能直接操作,而是要進行變通。
1
查找。
對於以某一項為關鍵字進行查找時,比如在結構體中有int型的成員a,要查找a為100的結構體變數,這時需要遍歷每個結構體(數組、鏈表、或者其它任意形式),對每個元素的成員a值進行比較,符合的則表示查找成功。
對於結構體中元素較多,同時要對整個結構體每個元素都匹配才算查找到的特殊情況,可以使用memcmp的方式,整體進行比較,以減少代碼量。不過這種情況較為少見,不過多描述。
2
輸出。
對於結構體的輸出,其實就是對其每一項,或者若干項成員變數的輸出。
所以可以使用基本的輸出函數,對每一項單獨輸出,輸出中為了方便閱讀,可以加一些說明文字。
如果對結構體輸出有多處調用的需求,可以在將該功能封裝為函數,供各個需要的函數調用。這樣的好處是,當結構體的成員出現變化,或者結構體輸出要求更改時,修改一處代碼即可完成所有的輸出修改,實現易於維護的效果。