❶ c語言結構體里引用結構體
#include
struct person
{
char name[10];
int num;
};
void main()
{
struct person per[5];
void sort(struct person *, int );
int i;
printf("print letter:\n");
for(i=0;i<5;i++)
{
printf("name: ");
scanf("%s", &per[i].name);
printf("num: ");
scanf("%d", &per[i].num);
}
sort(per, 5);
for(i=0;i<5;i++)
printf("print: %s%d\n", per[i].name, per[i].num);
getch();
}
void sort(struct person *a, int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i].num>a[j].num)
{
t=a[i].num; /*你代碼中i寫成j,這是細節問題*/
a[i].num=a[j].num;
a[j].num=t;
}
}
你代碼有點問題,我給你改了改。TC測試通過。
除了注視的地方,還有幾點要注意:
你源代碼傳送的是per[0].num的地址,記:a[0],但是a[1]的地址不等於
per[1].num的地址。
指針加1的意思你沒理解好。
舉個列子。
int a[10];
那麼*(a+1)的意思是把a地址向後移動sizeof(int)個位。
所以你那個&a[1]指向的還是結構體中的數據。(恩,這里體現了低級語言的特性。每一個內存的每一位都要考慮到。要是你寫個程序:200位的浮點數加法計算機,你更能體會到什麼叫做考慮到每一位內存,調試的時候要一個內存一個內存的演算。代碼我的空間里有,可以自己去看)
不懂的問
❷ C語言結構體數組可以包含不同結構體類型的變數嗎
舉個例子 struct A // A就是形如這樣的結構體的名字 { int a; int b; }; struct B // B就是形如這樣的結構體的名字 { char a[10]; }; 兩個結構體都是自定義的,所以需要知道使用的是哪個結構體,所以調用這個結構體的時候必須寫成struct A,才算是A結構體的類型,因此定義A的變數就寫成struct A a; // a是結構體A類型的變數
❸ c語言結構體可以隨意嵌套結構體么
c語言結構體可以隨意嵌套結構體
但是像這樣
struct player {
struct plane1;
struct plane2;
} playerA, playerB, *player; 是錯誤的。
struct plane{
……
} ;只是定義了一個名為plane的結構體類型。
嵌套結構體應該是這樣:
struct player {
struct plane plane1;
struct plane plane2;
} ;
❹ c語言中結構體問題!前一個結構體數組,後一個怎麼把它包含在第二個結構體中
改成
int main()
{
OK st;
st.arcs[0].sid=1;
printf("%d",st.arcs[0].sid);
}
adj本身沒有在上面定義中出現,所以應該是sid
ST是struct Student 數組形式,要求使用下標代表st的一個元素。
❺ c語言裡面的結構體是什麼意思
結構體(struct)是由一系列具有相同類型或不同類型的數據構成的數據集合,叫做結構。
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。
結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(5)c語言結構體包含結構體擴展閱讀
將一個結構體變數中的數據傳遞給另一個函數,有下列3種方法:
(1) 用結構體變數名作參數。一般較少用這種方法。
(2) 用指向結構體變數的指針作實參,將結構體變數的地址傳給形參。
(3) 用結構體變數的引用變數作函數參數。
在軟體開發過程中,常常需要動態地分配和撤銷內存空間,例如對動態鏈表中結點的插入與刪除。C語言中是利用庫函數malloc和free來分配和撤銷內存空間的。
❻ 【c語言共用體】裡面嵌套有結構體,求詳解。高分懸賞。謝謝
共用體就是享用同一塊內存
在此例中
e的大小為最長元素的大小,也就是結構體out的大小,共兩個int,假設此處int為4位元組
e.c和e.d和e.out.a佔用同一塊內存,即低4位元組的內存,a.out.b佔用高4位元組內存
然後e.c=1;e.d=2;
e.c和e.d和e.out.a都為2
e.out.a=e.c*e.d = 2*2 = 4;
那麼e.c和e.d和e.out.a都變成了4
e.out.b=e.c+e.d = 4+4 = 8
❼ c語言結構體嵌套問題
struct goods_type{....}; struct goods_type goods; 試試這樣寫!賦值時最後一個參數day不是date!
❽ C語言中結構體中含結構體指針
void creat(zong &p)
{
p=(zong)malloc(sizeof(struct all));
p->sjiben=(ba)malloc(sizeof(struct basic)); //添加這個,否則sjiben根本不知道指向什麼東西啊
p->next=NULL;
}
void set(zong &p)
{
zong q=(all *)malloc(sizeof(struct all));
q->sjiben=(ba)malloc(sizeof(struct basic)); //添加這個,否則sjiben根本不知道指向什麼東西啊
zong w=p;
while(w->next!=NULL)
{w=w->next;}
w->next=q;
q->next=NULL;
printf("年齡:");
scanf("%d",&q->sjiben->age);
}
❾ C語言 如何在結構體中給嵌套的結構體賦值
結構體嵌套,賦初值,大括弧嵌套就可以了。
問題是你代碼寫錯了。
你定義的old1不是結構類型,而是結構變數。
在shuju中成員要寫struct old 變數名;
不能寫struct old1。
下面是演示代碼:(補充:如果想定義一個結構類型別名,要用typedef)
#include <stdio.h>
struct old
{
int year;
int month;
int day;
}old1={1972, 8, 3};
struct shuju
{
char name[10];
char gender[6];
int height;
struct old old1;
char access[9];
}shuju1={"moumouren","male",175,{2019,6,29},"well"};
int main()
{
printf("結構變數old1的初值: %d %d %d ",old1.year,old1.month,old1.day);
printf("結構變數shuju1中成員old1的初值:%d %d %d ",shuju1.old1.year,shuju1.old1.month,shuju1.old1.day);
printf("我特意起一樣的名字,就是告訴你這兩個變數是不一樣的。 ");
return 0;
}
/*(補充:如果想定義一個結構類型別名,要用
typedef struct old
{
int year;
int month;
int day;
}old1;//這樣old1才表示是一個類型,然後再定義該類型變數時,才可以寫 old1 變數名;
)*/
❿ C語言結構體定義
C語言結構體定義:struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
結構體是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(10)c語言結構體包含結構體擴展閱讀
1、struct是聲明結構體類型時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。
2、structSTUDENT是定義的數據類型的名字,它向編譯系統聲明這是一個「結構體類型」,包括name、num、sex、age、score、addr等不同類型的項。
3、structSTUDENT與系統提供的int、char、float、double等標准類型名一樣,都是數據類型,具有同樣的作用,都是用來定義變數的。