關於c語言結構巢狀發什麼的問題,關於c語言 結構巢狀發什麼的問題

時間 2022-04-15 12:35:29

1樓:卑躬屈膝的人生

同學,就我看來,你的程式有如下幾個問題:

1.結構體賦值是淺拷貝,意思就是直接結構體的記憶體的拷貝。如果遇上指標和陣列,只是複製了指標或陣列的位址,那麼問題來了,如果指標指向的記憶體被釋放,那麼此時指標成為野指標,就會出現一些不可預見的問題。

如圖,就你程式來說

student 結構體內有陣列,max變數是stu[i]的淺拷貝,stu[i]到printf函式呼叫時已經沒在使用,所以不同編譯器會產生不同結果,max很可能會成野指標,如我gcc 5.1.0編譯,結果如下:

2.當結構體變數是區域性變數時,編譯器對其分配記憶體並初始化,但是初始化的值是不確定的,需要自己清空。所以會出現你第三幅圖,你看到一大堆燙字是因為沒清零結構體中的

char munber[10]和char name[10];建議你手動清空記憶體。

3.你的stu陣列輸入方式scanf("%s,%s,%f",stu[i].munber,stu[i].

name,stu[i].score);存在一定問題,我們輸入字串時,scanf函式會 以空格分隔,導致每行的輸入都是stu[i].munber,stu[i].

name,stu[i].score完全沒有輸入到,使用的是記憶體隨機資料。

下面是我對你的程式的修改,能正常執行:

#include

#include

struct student //結構型別學生的定義

char number[10]; //有字串定義學生的學號

char name[10];

float score;

int main()

struct student stu[5];

int i;

struct student *max=null;

for(i=0; i<5; ++i)

//清空記憶體

memset(stu[i].number,0,10);

memset(stu[i].name,0,10);

stu[i].score = 0.0;

max = &stu[0];//指標指向stu第乙個元素

for(i=0; i<5; ++i)                            //用for迴圈輸入學生資料

if(max->score < stu[i].score)

max = &stu[i];//改變指標指向

printf("最優秀的學生是:學號為%s的%s同學\n",max->number,max->name);

return 0;

以上是個人見解,不當之處望指正。

2樓:匿名使用者

#define  _crt_secure_no_warnings#include"stdio.h"

#include

#include

struct student //結構型別學生的定義;void main()

printf("最優秀的學生是,學好為%s的%s同學\n", max.munber, max.name);

system("pause");}

關於c語言結構體巢狀的問題

3樓:

早期純c編譯器要求結構體型別必須寫上struct關鍵字,不能只寫個結構體名。後來c++相容的編譯器則允許寫結構體名就可以了。所以你在巢狀時結構體成員名前寫上struct(struct order order;)就在什麼編譯器下都能通過了……

4樓:匿名使用者

struct order

~~~~~~~~~~~

c語言 關於結構體巢狀賦值的問題 急求解答 非常感謝 15

5樓:

datetype是定義為char了嗎?

seqlist a;

strcpy(a.num[0].email,"[email protected]");

陣列不是一等公民,不能直接賦值。

6樓:匿名使用者

#include

#include

typedef char datetype;

typedef struct

emaillist;

typedef struct

seqlist;

int main()

7樓:匿名使用者

定義乙個seqlist的物件,然後進行呼叫啊~比如:

seqlist seq;

seq.num[0].email[0] = 你想賦的值】你可以吧email定義成string型別

c語言中結構體巢狀

8樓:匿名使用者

struct student

;typedef struct student stu; //學生struct class

;typedef struct class class; //班void main(void)

; //學生陣列

stu .....

class classes[8]; //班級陣列classes[0].students = students; //初始化班級學生

classes[1].students = ....

......

}粗略的描述了一下,用指標來做最好!

9樓:匿名使用者

struct class two_classes[2];

two_classes[i].a[j] = ...;

另外,class中的陣列a的長度需要乙個常量

10樓:匿名使用者

可以;我感覺j應該是常量

struct class

c語言結構體巢狀有什麼用途

11樓:匿名使用者

十分有用哦

比方汽車這個結構體 這個結構體當中有 車盤 車架 輪盤 馬達等等

而馬達這個結構體又是有其他許多零件描述的 這樣來描述乙個複雜的事物時不是相對來說一目了然了嗎!

c語言巢狀結構體問題

12樓:匿名使用者

希望lz以後再問問題,格式給弄清楚了,上樓給出回答實屬不易

關於C語言結構體定義的問題,C語言裡結構體的問題。結構體定義指標型別是怎麼回事?

parr t就是乙個指標。其中parr t中儲存著對應的位址 parr t就是這個位址對應的變數,而且這個變數是arphdr結構型別 我見過這樣的題,沒看懂你的意思,不過我看這樣說吧,structab 我打。的地方表示你可以在那裡新增所有的資料形式的定義,比如,int a char a 10 等等 ...

C語言,結構體和函式的問題,關於C語言結構體和函式的問題

include struct math void main struct math add struct math s1,struct math s2 回答的人還挺多,居然沒樓上的手快,看來我只有增加內容了!說明 區域性函式需要乙個返回值,給z。這道題可以有三種解決方法 一 用指標,讓區域性函式返回...

關於資料結構(c語言版)的問題,關於資料結構(C語言版)的問題

順序表和煉表都帶頭結點 1 void seqlistinsert seqlist l,int num while j l length else l length for i l length i j i data j num 2 void linkdelete linknode head,int ...

c語言結構體求解,C語言結構體求解。。

兩個資料之間沒有分隔符,可以做如下修改 同理,你下面的printf兩個資料之間最好也加上分隔符 stu 0 score 0 stu 0 score 1 stu 0 score 2 a stu 1 score 0 stu 1 score 1 stu 1 score 2 b stu 2 score 0 ...

c語言結構體型別,C語言結構體型別

遞迴是呼叫自身,資料結構裡的鍊錶定義裡邊是結構體指標,而非結構體自身,不是遞迴呼叫。線性表單鏈表並沒有遞迴呼叫啊,他是用指標指向下乙個鍊錶struct lnode next 你去在理解下遞迴思想。呵呵,前面的都沒說到問題的本質.建議你先去了解下什麼是指標,什麼是指標變數.因為指標變數是存放指標的,並...