c語言結構體的定義,C語言結構體的定義

時間 2021-10-14 21:54:46

1樓:滑映寒愈霽

第二個struct

student是定義了一個student結構體,這個明白吧。

第一個是用typedef把struct

student這個結構體型別名字重新定義為student,也就是說struct

student和student表示同一個事物,都是一個型別的識別符號,比如

typedef

intzhengshu;

就是你把整型int重新命名為zhengshu,下面定義:inti;和zhengshu

i;兩句就是等價的了

打字不易,如滿意,望採納。

2樓:go陌小潔

定義一個結構體

結構體裡面存著 一個字元資料,char data;

還有隻想下個結構體節點的指標,struct lnode *next;

lnode,*linklist是給這個結構體資料型別取名字。相當於 int char

3樓:

這有連結串列的樣子,這個next是記錄下一個lnode在那個,就好比一個節點,至於去掉}這個我不知你的原因,你可以告訴我為什麼想去掉嗎?回答得知道你怎麼想的

4樓:演算法王健

這段程式意思是定義一個lnode類的結構體,後面的lnode是結構體變數,linklist是結構體指標。裡面的struct lnode *next是定義指向lnode結構體的指標域,說明lnode結構體裡面結點一共兩個域一個資料域,一個指標域。}後面的lnode可以去掉,可以在其他地方宣告結構體變數。

5樓:

可以啊。那就只定義了一個指標別名linklist啊!

6樓:匿名使用者

struct lnode *next;是什麼意思啊? //定義該節點的指標域,用於儲存下個節點的地址

如果去掉「}」後面的lnode可以嗎 //可以不過你用這個型別的話就得連續寫struct lnode

7樓:匿名使用者

首先需要弄清typedef的作用:

int a; //首先定義一個int型的變數a

typedef a my_int; //typedef 的作用是宣告一種新的資料型別,該資料型別和變數a所屬的型別一樣。

my_int b; //然後就可以使用typedef宣告的新的資料型別my_int來定義新的變數b,此時b就是my_int型別也就是int型別

struct lnode

上面這個結構體定義應該很熟悉,就是定義了一個lnode的結構體變數,可以類似於上面的變數a。這裡我們把struct lnode結構體變數替換為變數a,所以你的結構體變為:

typedef a lnode,*linklist

上面的**等價於下面兩行:

typedef a lnode; //定義lnode是一種struct lnode的資料型別,比如:lnode my_struct;

typedef a *linklist; //定義了一種指向lnode資料型別的指標型別linklist,比如:linklist my_point;

c語言結構體定義

8樓:

c語言結構體定義:struct為結構體關鍵字,tag為結構體的標誌,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體宣告的變數。

結構體是c語言中聚合資料型別(aggregatedatatype)的一類。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。

擴充套件資料

1、struct是宣告結構體型別時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。

2、structstudent是定義的資料型別的名字,它向編譯系統宣告這是一個「結構體型別」,包括name、num、***、age、score、addr等不同型別的項。

3、structstudent與系統提供的int、char、float、double等標準型別名一樣,都是資料型別,具有同樣的作用,都是用來定義變數的。

9樓:吉祥二進位制

struct在c語言中是一個關鍵字,用於定義結構資料型別。

問題中的兩種定義的區別在於第一種是給student資料型別,重新定義了一個型別別名,而第二種則單純的表示一種叫做student的資料結構型別。兩者的主要區別在於後面直接定義變數時。如下**,則可以直接在結構體後面定義一個zhang_san的結構體變數。

struct student

zhang_san;

而第一種的定義,則會出現錯誤。

typedef struct student

student zhang_san;

擴充套件:「結構」是一種構造資料型別,現在一般叫做使用者自定義資料型別,它是由若干「成員」組成的。 每一個成員可以是一個基本資料型別或者又是一個構造型別。

 結構即是一種「構造」而成的資料型別, 那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和呼叫函式之前要先定義一樣。

定義一個結構的一般形式為:

struct結構名

;成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為:「型別說明符 成員名;」。成員名的命名應符合識別符號的書寫規定。例如:

struct stu

;在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型陣列;第三個成員為***,字元型變數;第四個成員為score,浮點型變數。 應注意在括號後的分號是必不可少的。

10樓:苑餘殷運浩

結構體就像陣列一樣,其中的資料是有互相聯絡的,有些情況下定義一些簡單的變數是不能反映出資料之間的內在聯絡,所以我們就把這些資料組合成一個項,而這個項中包含著很多不同的資料項,這就是結構體。

簡單理解下,就是說把一些有內在聯絡的不同變數放在一起封裝成一個整體,這就是結構體。

指標,其實就是一個存放地址的變數,指標可以指向變數,陣列,結構體等資料所在的記憶體單元。

指標就是用來通過地址去找資料的,只要你把該資料的地址給指標,那麼當你用到指向這個資料的指標時就等於在使用該資料。

11樓:

第二個struct student是定義了一個student結構體,這個明白吧。

第一個是用typedef把struct student這個結構體型別名字重新定義為student,也就是說struct student和student表示同一個事物,都是一個型別的識別符號,比如 typedef int zhengshu; 就是你把整型int重新命名為zhengshu,下面定義:int i; 和 zhengshu i; 兩句就是等價的了

12樓:匿名使用者

網頁連結看這個,茅塞頓開

13樓:匿名使用者

您參考這裡

14樓:匿名使用者

#include "stdio.h"

#include "string.h"

#define n 50

struct infoma;

struct infoma funname(struct infoma namet)

struct infoma allname(struct infoma namet)

void putout(struct infoma namet)main()

15樓:巧克力

第一種並沒有什麼意義,typedef為結構體student名定義一個別名,應該與student不一樣,例如:stu,將student重定義為student挺搞笑的。

而第二種只是單純的定義了一個結構體student。也可以在後面加上:typedef student stu。

16樓:傳說中的不死神

答案太亂了,其實你是不明白typedef的用法。

簡單地說:舉例定義無符號整形變數方法有兩種unsigned    int vault_a;

typedef unsigned int      def_uintdef_uint   vault_a;

這兩種方法都可以定義了 vault_a為無符號整形變數。

c語言中如何定義一個結構體

17樓:藥郎小跟班

結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標誌,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體宣告的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。

結構體的成員可以包含其他結構體,也可以包含指向自己結構體型別的指標,而通常這種指標的應用是為了實現一些更高階的資料結構如連結串列和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整宣告。

擴充套件資料:

一、結構體作用:

結構體和其他型別基礎資料型別一樣,例如int型別,char型別,只不過結構體可以做成你想要的資料型別,以方便日後的使用。

在實際專案中,結構體是大量存在的,研發人員常使用結構體來封裝一些屬性來組成新的型別。由於c語言內部程式比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。

結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。

二、結構體的大小與記憶體對齊:

結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是32bit字長的cpu,對這型別的cpu取4個位元組的數要比取一個位元組要高效,也更方便。

所以在結構體中每個成員的首地址都是4的整數倍的話,取資料元素時就會相對更高效,這就是記憶體對齊的由來。每個特定平臺上的編譯器都有自己的預設「對齊係數」(也叫對齊模數)。

程式設計師可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數,其中的n就是你要指定的「對齊係數」。

三、結構體的規則:

1、資料成員對齊規則:結構(struct)(或聯合(union))的資料成員,第一個資料成員放在offset為0的地方,以後每個資料成員的對齊按照#pragma pack指定的數值和這個資料成員自身長度中,比較小的那個進行。

2、結構(或聯合)的整體對齊規則:在資料成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大資料成員長度中,比較小的那個進行。

3、結合1、2可推斷:當#pragma pack的n值等於或超過所有資料成員長度的時候,這個n值的大小將不產生任何效果。

C語言結構體定義,C語言結構體定義 25

chanrich輕輕 所謂結構體陣列,是指陣列中的每個元素都是一個結構體。在實際應用中,c語言結構體陣列常被用來表示一個擁有相同資料結構的群體,比如一個班的學生 一個車間的職工等。結構體可以儲存不同的資料型別,將他們互相聯絡起來。結構體陣列可以連續儲存多個結構體,和陣列作用相似。比如想定義同一個最小...

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

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

C語言連結串列與結構體,c語言結構體與連結串列

北風微風 include include define null 0 define len sizeof struct student struct student int n struct student creat void if n 0 head null p2 next null free ...