c語言結構體的定義及使用,C語言 結構體的定義及使用

2022-03-06 01:44:17 字數 6328 閱讀 9588

1樓:匿名使用者

額·你的初始化有錯誤~~

yinkailin.name = "yinkailin";這樣初始化是不行滴~

加標頭檔案#include

然後這樣初始化~

strcpy(yinkailin.name, "yinkailin");

2樓:伊·梵

不是結構體的問題,是陣列的問題

char name="tom";//正確:定義並初始化char name[20];

name="tom"; //錯誤

name="tom"; //錯誤

strcpy(name,"tom"); //正確,字串拷貝scanf("%s", name); //正確,從鍵盤輸入

3樓:匿名使用者

你需要在主程式中規定資料型別,或者把資料設成公有的

4樓:彭珂的課堂

c語言_071_指標的定義和使用_上

c語言結構體定義 25

5樓:chanrich輕輕

所謂結構體陣列,是指陣列中的每個元素都是一個結構體。在實際應用中,c語言結構體陣列常被用來表示一個擁有相同資料結構的群體,比如一個班的學生、一個車間的職工等。

結構體可以儲存不同的資料型別,將他們互相聯絡起來。結構體陣列可以連續儲存多個結構體,和陣列作用相似。比如想定義同一個最小外接矩形的四個座標值,並給予這個矩形一個特徵編號。

當需要儲存多個最小外接矩形的資訊時,就需要動態申請一個結構體陣列。

struct 結構體型別名{型別名 成員名;型別名 成員名;……},先宣告結構體型別,再定義結構體變數名。宣告結構體型別,不分配空間,定義結構體型別變數,就要分配記憶體空間。

擴充套件資料:

結構體陣列指標型別:

一個結構體變數的指標就是該變數所佔據的記憶體段的起始地址。可以設一個指標變數,用來指向一個結構體變數,此時該指標變數的值是結構體變數的起始地址,指標變數也可以用來指向結構體陣列中的元素。

1、型別一:

指向結構體變數的指標引用結構體變數中的成員。

2、型別二:

用結構體變數和指向結構體變數的指標構成連結串列,連結串列是一種常見的重要的資料結構。連結串列有一個「頭指標」變數,以head表示,它存放一個地址。該地址指向一個元素。

連結串列中的每一個元素稱為「結點」,每個結點都應包括兩個部分:

一是使用者需要用的實際資料,

6樓:藥郎小跟班

結構體的定義如下所示,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值的大小將不產生任何效果。

7樓:杜哥是個小天才

struct namename;

拓展資料c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言制定了一套完整的美國國家標準語法,稱為ansi c,作為c語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。

8樓:知識慧

c語言結構體型別的定義模板大概為:

struct 型別名 變數;

在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregate data

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

在成員表列中可以是幾種基本資料型別,也可以是結構體型別。

struct 型別名{} 變數;後的分號不能漏

下面給出定義結構體型別的幾種方法:

1. 先定義結構體型別,再定義結構體變數。

struct student;

struct student stu1,stu2;//此時stu1,stu2為student結構體變數

2. 定義結構體型別的同時定義結構體變數。

struct student stu1,stu2;

此時還可以繼續定義student結構體變數如:

struct student stu3;

一般不會使用第三種定義方法,因為直接定義結構體變數stu1,stu2後就不能再繼續定義該型別的變數。

c語言結構體定義

9樓:苑餘殷運浩

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

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

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

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

10樓:

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

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

11樓:

第一種是定義一個結構體並取個student結構體名,下次定義結構體是:

只要:student 《識別符號》; 乳student stu;

而第二種:必須這樣定義:struct student stu;

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中如何定義一個結構體陣列,怎麼賦值使用

你應該是少傳了一個頁數的引數,比如頁數為1時查詢資料庫1 10條資料,為2時查詢11 20條資料 定義 一個類,比較好 c 中如何定義一個結構體陣列,怎麼賦值使用 public struct gnss gnss gnss new gnss 24 gnss 0 lon sss 在你原有的結構體裡面加上...

C語言中構造型別資料指什麼,C語言的結構體型別是什麼資料 資料有哪些型別?

構造資料型別 構造資料型別是根據已定義的一個或多個資料型別用構造的方法來定義的。也就是說,一個構造型別的值可以分解成若干個 成員 或 元素 每個 成員 都是一個基本資料型別或又是一個構造型別。在c語言中,構造型別有以下幾種 c語言中的構造型別資料包括 結構 列舉 聯合 或者寫結構體和共用體也行 1 ...

C語言結構體的一道題,一道簡單的c語言結構體題

c c 加加作業有償待完成。一道簡單的c語言結構體題 include include define stunem 5 定義一個學生的成績表 typedef struct tagmember member 定義學生表 typedef struct tagtable table 獲取學生表中的學生指標 ...