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

時間 2025-05-07 21:50:08

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

1樓:卑躬屈膝的人生

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

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

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

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 = ;

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

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

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

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

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

return 0;

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

2樓:匿名使用者

#define _crt_secure_no_warnings#include""

#include

#include

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

printf("最優秀的學生是,學好為%s的%s同學", ,system("pause");}

C語言選擇結構if eslse巢狀問題,求詳細解釋

給你一個辦法,看看行不行,先找有沒有if後面緊跟著一個else的,如果有,那它們肯定是一對,全部給標上號,馬上就可以找到下面 1和 2這兩對 然後看一下已經標出來的有沒有一眼就可以看出來它的if else 條件下執行的語句到哪句結束,例子裡面 1這對的if可以看出來,但是else是看不出來的,2這對...

c語言結構體別名定義問題,C語言結構體別名定義問題

typedef struct stu linklist 此處第一了一個型的型別,即struct stu 即指向結構體stu的指標 所以head的型別也就是struct stu head為一個指向stu結構體型別的指標。但是並沒有未其分配具體的空間。可以將一個已定義為stu結構體的指標賦給它。 c語言...

C語言結構體問題

include include struct student struct student add struct student head struct student del struct student head,long number while number p1 number p1 nex...