Ⅰ c語言能向函數里傳遞任意一個結構體嗎
參數類型改成
void*
,傳的時候傳指針,
使用的時候再強制轉換成想要的類型。注意類型安全
Ⅱ C語言結構體Struct怎麼使用
在Turbo C中,結構也是一種數據類型, 可以使用結構變數,因此,像其它類型的變數一樣,在使用結構變數時要先對其定義。
如果需要定義多個具有相同形式的結構變數時用這種方法比較方便,它先作結構說明,再用結構名來定義變數。
(2)c語言傳遞結構體擴展閱讀
指向結構體的指針是一個一直都沒有掌握好的點,希望這里能記錄好一點,加強理解。
對於指針有幾個好處,
第一:就像指向數組的指針比數組本身更容易操作一樣,指向結構的指針通常也更容易操作;
第二:在早期的C中參數傳遞只能使用結構的指針;
第三:很多奇妙的數據表示都是用了包含指向其他結構的指針的結構。
和數組不同,結構的名字不是該結構的地址(即單獨的結構名並不是該結構地址的同義詞),必須使用 & 運算符。
參考資料c語言結構體struct相關使用說明
Ⅲ C語言定義結構體並賦值後,怎樣把整個結構體傳遞給子函數
使用堆內存,然後傳遞一個指向這個結構體的指針就可以了,
或者直接向子函數傳遞結構體變數.
比如:
#include<stdio.h>
#include<malloc.h>
typedefstructSTRC_def{
inti;
intj;
}STRC;
intFunc1(STRC*pSTRC);
intFunc2(STRCaSTRC);
intmain()
{
STRC*a=(STRC*)malloc(sizeof(STRC));//使用堆內存
STRCb;//使用棧內存
a->i=0;//初始化
a->j=0;
b.i=0;
b.j=0;
Func1(a);//傳遞指針
Func2(b);//傳遞變數
printf("a:%d%d b:%d%d ",a->i,a->j,b.i,b.j);//結果應該是a:12 b:00
//因為傳遞指針使用的是同一個存儲位置,而傳遞變數使用的是內容復制的存儲位置
return0;
}
intFunc1(STRC*pSTRC)
{
pSTRC->i=1;
pSTRC->j=2;
return0;
}
intFunc2(STRCaSTRC)
{
aSTRC.i=3;
aSTRC.j=4;
return0;
}
Ⅳ c語言udp通信能傳結構體嗎
不能傳結構體。
主要是三個方法:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen)
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen)
Ⅳ 關於c語言中的結構體數組作為函數參數傳遞的
1、結構體數組傳給指針,實質上是不可能的,本質上傳的是數組首地址,根據偏移來操作數組,這樣看起來好像是真在操作數組一樣。就和普通指針一樣使用,只不過它是結構體數組。
2、常式:
typedefstructStudent
{
charname[10];
intage;
}Student;
#defineLEN10
//printallStudentinfomation
voidfun(Student*pStu,intlen)
{
inti;
for(i=0;i<len;++i)
{
printf("%s %d",pStu[i].name,pStu[i].age);
}
}
intmain()
{
Studentstu[LEN];
fun(stu,LEN);
}
Ⅵ 關於c語言結構體形參傳遞的問題
一個要求數據返回,一個只是參數傳遞而不要求有返回。在C中使用*號代表地址引用,也就是說你傳遞過去的是一個實際的地址參數值,在編譯器中,參數的傳遞如果不要求有地址返回,在編譯過程中會新產生一個臨時變數來存儲你傳遞的型參,也就是說,傳遞過去的只是一個重新被賦值過的變數,這個變數是臨時的,在使用後就會被系統收回,達不到返回的目的。
Ⅶ C語言函數怎麼傳結構體指針
#include<stdio.h>
#include<stdlib.h>
#defineLINE_MAX80
structbody{
chardata[100];//要定義成數組才可以,不然,還要去分配內存
intnum;
};
voidcreate(structbody*bd);//結構體定義後,才能使用結構體類型,所以,移動到定義之後
intmain(intargc,char*argv[]){
intchoose;
structbody*bd;
bd=(structbody*)malloc(sizeof(structbody));
while(1)
{
printf("*******************歡迎來到文章編輯系統******************** ");
printf("1.創建新文本 ");
printf("2.統計文本 ");
printf("5.退出系統 ");
printf("請選擇你需要的功能的序號:");
scanf("%d",&choose);
switch(choose)
{
case1:
printf("創建新文本 ");
create(bd);
continue;
case2:
printf("統計文本 ");
continue;
case5:
printf("謝謝您的使用! ");
break;
default:
printf("請正確輸入! ");
continue;
}
if(choose==5)
break;
}
return0;
}
voidcreate(structbody*bd)
{
printf("編輯文本,Enter鍵保存 ");
scanf("%s",bd->data);//結構體指針引用成員用->,同時,格式串應該是%s
printf("您輸入的文本是:%s ",bd->data);//同上
}
Ⅷ C語言結構體傳遞問題
可以。~
struct TempleA
{
int a;
};
TempleA a;
a.a = 0;
TempleB b;
b = a;
//b.a一定就是0了。~賦值成功了~ 更大一點也行。只要是一個結構體類型。
Ⅸ c語言裡面的結構體是什麼意思
結構體(struct)是由一系列具有相同類型或不同類型的數據構成的數據集合,叫做結構。
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。
結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(9)c語言傳遞結構體擴展閱讀
將一個結構體變數中的數據傳遞給另一個函數,有下列3種方法:
(1) 用結構體變數名作參數。一般較少用這種方法。
(2) 用指向結構體變數的指針作實參,將結構體變數的地址傳給形參。
(3) 用結構體變數的引用變數作函數參數。
在軟體開發過程中,常常需要動態地分配和撤銷內存空間,例如對動態鏈表中結點的插入與刪除。C語言中是利用庫函數malloc和free來分配和撤銷內存空間的。