c語言 為什麼這個結構體型別不匹配?

2023-07-07 09:05:04 字數 4419 閱讀 4111

1樓:匿名使用者

這個warning主要是由於你遞迴形式的定義了新的type test和struct test不匹配導致的。

正確寫法是,另起一個結構體名。

2樓:紀元玩遊戲

結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體。

3樓:匿名使用者

雖然邏輯上相等但是編譯器不夠聰明。改學c++吧,c的意義已經越來越小了。

4樓:yx陳子昂

typedef struct的時候沒有命名,那麼定義裡面是struct test就是另外一個結構。

c語言問題:如下定義的結構體型別為啥編譯錯誤,編譯平臺為visual studio 2013 ?

5樓:匿名使用者

在你定義node *pnext;/的時候系統還不知道node是啥(node定義在結構體結尾)

typedef struct node node;

6樓:網友

改成這樣應該就可以了。

typedef struct node node;

c語言結構體,為啥這樣子分配不到記憶體?

7樓:倒黴熊

因為第二個是值傳遞,在函式內部發生的任何的變化都不會影響到函式外的變數。

而第一個傳遞是地址。

8樓:網友

void initstack(mystack *mstack)

函式宣告中的引數是:mystack *mstack,引數是一個mystack 型別的指標。

1)mystack mystack;

正確,將變數 mystack 的地址作為 initstack 的引數,引數型別匹配。

initstack(&mystack);

void initstack(mystack *mstack)

函式宣告中的引數是:mystack *mstack,是一個mystack 型別的指標。

2)mystack mystack;

錯誤,將變數 mystack 的本身作為 initstack 的引數,引數型別不匹配。

initstack(mystack);

9樓:無庸自道

3樓哥們說的不錯。

typedef mystack *mystack,說明mystack是個結構體指標型別,那麼mystack mystack這句表示mystack是個mystack 型的結構體且是個指標。所以實參是一重指標,而形參*mstack這是個二重指標,所以要麼像3樓那麼改,要麼就直接將void initstack(mystack *mstack)改為void initstack(mystack mstack)也可。

c語言結構體問題

10樓:網友

你把最高分的族改人的下標記下兆李判來就行擾指,對於結構體變數直接賦值,返回地址是錯誤的問題,我也搞不清楚。我用下標做出來的行的。

11樓:網友

char *best錯了吧,應該是char best

best=s[j}改成strcpy(,s[j].id);

12樓:匿名使用者

函式名和裡面定義的結構體不要同名試試。

13樓:年少天下

s是什麼?沒有宣告。且裡面沒引數。

c語言題目:要求輸入學生的資訊(結構體型別),為什麼輸入完第二項,電腦就出錯?編譯時,沒顯示錯誤。

14樓:匿名使用者

for (i=1;i<=3;i++)這是輸入三個學生的資訊。所以必須是三個結構體,因此要改成結構體陣列。

#include

int main ()

meassage[3];

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

printf("可以");

return 0;}

c語言中不是說 結構體也能強制轉換型別的嗎,為什麼寫的這段**會報錯呢?

15樓:匿名使用者

結構體是通過指標實現的強制型別轉換吧。

main();

struct a2 y =

struct a2 z;

struct a2 *p;

p = struct a2 *)x;//這種強制型別轉換,把x當a2型別變數使用就通過這個p指標。

p->a;

printf("%d",;

16樓:報廢

我也想說是誰告訴你可以強制轉換的。

17樓:匿名使用者

沒繼承關係,搞什麼強制型別轉換啊。。。

18樓:換小米

有這樣的結構體轉換麼?就算有,這樣使用肯定是不正確的,你想要達到的目的是什麼?

19樓:匿名使用者

是哪個告訴你「結構體也能強制轉換型別」

c語言結構體問題:

20樓:匿名使用者

如果沒有typedef的話,old就是一個結構題變數。

b改為那個是對的。

typedef的作用就像巨集一樣,可以理解為 「將***起名為***old和struct node是一個東西。

21樓:匿名使用者

typedef struct node

old;相當於struct node

typedef struct node old; /所以d錯 c對 old是結構體型別 不是物件。

struct node是一個結構體型別」對不對?對。

22樓:匿名使用者

你用node的時侯。

struct node 變數名。

對比int 變數名。

型別。old這個看c語言書。有教。

c語言結構體型別

23樓:匿名使用者

遞迴是呼叫自身,資料結構裡的連結串列定義裡邊是結構體指標,而非結構體自身,不是遞迴呼叫。

24樓:匿名使用者

線性表單連結串列並沒有遞迴呼叫啊,他是用指標指向下一個連結串列struct lnode *next;

你去在理解下遞迴思想。

25樓:匿名使用者

呵呵,前面的都沒說到問題的本質。

建議你先去了解下什麼是指標,什麼是指標變數。

因為指標變數是存放指標的,並沒有被分配所指向資料型別的記憶體。

從你第一個結構體型別來看是錯的,因為struct student kobe; 這樣是申請一個結構體變數,這樣就分配記憶體了,這裡請理解普通變數和指標變數的區別!接著這樣造成的後果是會無休止申請結構體變數->分配記憶體->申請結構體變數->分配記憶體。

但是指標變數就不同,只佔4個位元組而已。並非真正意義上的結構體變數,因為它所佔有的記憶體並非是結構體大小的記憶體。

這都需要自己去多寫程式,多理解,說不明白的,只能自己悟。

c語言結構體,這個程式的錯誤在哪?

26樓:戊問鮃

#include

#define n 10

struct student//定義結構體型別;void main()

s[k].sum=s[k].score[1]+s[k].score[2]+s[k].score[3];

printf("%d",s[k].sum);

這是改過的,可以執行,但是因為不清楚你的具體要求,你那個sum怎麼是個陣列呢,你可以試一下,不行hi我。

27樓:

都是陣列還有一個是char型別的,那個scanf絕對會出錯的,即使當時沒問題,輸入的也不是你想要的!即使,也只是從輸入資料裡讀一位整數還是要求,那個num的空間夠整數的才行,那個scanf)前的「是出錯的原因,但程式一團糟,改了也不會太好,還是想好。

28樓:兩極

這句話裡 2個,&s[k].score[0]

s[k].sum=s[k]score[1]+s[k].score[2]+s[k].score[3];

既然你都知道 陣列下標是從0開始的 這句話為什麼是1 2 3 應該是 0 1 2

為什麼你照著書上抄** 都會錯呢 你用的vc吧 編譯一下 按下 f4 就知道錯誤在**了 不是說了嗎 你少了個 括號 )

C語言結構體名和結構體型別名有什麼區別

結構體型別名可以將不同型別的變數放在一起,應用很廣,具體應用可以拿本c語言的書看看。結構體名就是結構體變數的名字,與變數名類似 c 中結構體的char型別怎麼賦值?如果用baistring的話,要在開頭加上du include 然後struct worker 後邊就可以像你那麼dao直接賦值就行了。...

C語言的結構體和共同體的區別是什麼

結構體 structure 是一種構造型別,它是由若干 成員 組成的。每一個成員可以是一個基本資料型別或者又是一個構造型別,而且每個成員的資料型別可以相同也可以不相同。共同體 union 將幾種不同的變數儲存在同一記憶體單元中,也就是使用覆蓋技術,幾個變數互相覆蓋,這種幾個不同的變數共同佔用一段記憶...

為什麼我的這個C語言程式不的正確輸出等邊三角形?求高手修改

這是因為等邊三角形肯定是等腰三角形,if else的條件是依次判斷的,應把等邊三角形的判斷放在是否是等腰三角形之前 if a c a b b c printf 這是一個等腰三角形 n else if a c a b b c printf 這是一個等邊三角形 n 反過來就行。scanf lf lf l...