1. c語言結構體是什麼
C語言結構體(Struct)從本質上講是一種自定義的數據類型,只不過這種數據類型比較復雜,是由 int、char、float 等基本類型組成的。你可以認為結構體是一種聚合類型。
在實際開發中,我們可以將一組類型不同的、但是用來描述同一件事物的變數放到結構體中。例如,在校學生有姓名、年齡、身高、成績等屬性,學了結構體後,我們就不需要再定義多個變數了,將它們都放到結構體中即可。
簡介
關鍵字struct和結構體名組合成一種類型標識符,其地位如同通常的int、char等類型標識符,其用途就像 int 類型標識符標識整型變數一樣可以用來定義結構體變數。
定義變數以後,該變數就可以像定義的其他變數一樣使用了;成員又稱為成員變數,它是結構體所包含的若干個基本的結構類型,必須用「{}」括起來,並且要以分號結束,每個成員應表明具體的數據類型。
2. c語言什麼叫結構體
結構體定義
結構體(struct)是由一系列具有相同類型或不同類型的數據構成的數據集合,也叫結構。
結構體作用
結構體和其他類型基礎數據類型一樣,例如int類型,char類型 只不過結構體可以做成你想要的數據類型。以方便日後的使用。
在實際項目中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的類型。
結構體在函數中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
結構體的大小與內存對齊
結構體的大小不是結構體元素單純相加就行的,因為我們現在主流的計算機使用的都是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語言中,可以定義結構體類型,將多個相關的變數包裝成為一個整體使用。在結構體中的變數,可以是相同、部分相同,或完全不同的數據類型。在C語言中,結構體不能包含函數。在面向對象的程序設計中,對象具有狀態(屬性)和行為,狀態保存在成員變數中,行為通過成員方法(函數)來實現。C語言中的結構體只能描述一個對象的狀態,不能描述一個對象的行為。在C++中,考慮到C語言到C++語言過渡的連續性,對結構體進行了擴展,C++的結構體可以包含函數,這樣,C++的結構體也具有類的功能,與class不同的是,結構體包含的函數默認為public,而不是private。
C++控制台輸出例子:
#include <cstdlib>
#include <iostream>
//定義結構體
struct point
{ //包含兩個變數成員
int x;
int y; };
using namespace std;
int main(int argc, char *argv[])
{
struct point pt;
pt.x=1;
pt.y=2;
cout<<pt.x<<endl<<pt.y<<endl;
return EXIT_SUCCESS;
}
C++中的結構體與類的區別
類與結構體在C++中只有兩點區別,除此這外無任何區別。 (1)class中默認的成員訪問許可權是private的,而struct中則是public的。 (2)從class繼承默認是private繼承,而從struct繼承默認是public繼承。
3. c語言結構體定義和使用是什麼
c語言結構體是類似於名片形式的數據集合體,可以把它理解為一種由用戶自定義的特殊的復合型的「數據類型」,在這個復合型的「數據類型」中可以包含多種基本數據類型,我們可以把它作為一個整體來操作。
c語言使用:結構體數組的引用與引用一個結構體變數在原理上是一樣的。只不過結構體數組中有多個結構體變數,我們只需利用 for 循 環一個一個地使用結構體數組中的元素。
結構體的意義
結構體描述了一段內存的解釋意義。
在內存中,數據的意義在於如何使用此段數據,如在內存中存有一個數據3,如果只把他當作正整數來使用,那麼其意義為正整數3,如果把內存中的3,當作2的3次方來使用,那麼3的意義則為指數3。而一個結構體則描述了一段內存中的數據的使用意義。
4. C語言結構體定義
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體類型的指針,而通常這種指針的應用是為了實現一些更高級的數據結構如鏈表和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整聲明。
(4)c語言基礎語法結構體擴展閱讀:
一、結構體作用:
結構體和其他類型基礎數據類型一樣,例如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值的大小將不產生任何效果。
5. c語言結構體有哪些
如下:
第一種:只有結構體定義:
1. struct stuff{
2.char job;
3. int age;
4. float height;
5. };
第二種:附加該結構體類型的「結構體變數」的初始化的結構體定義:
1. //直接帶變數名Huqinwei
2. struct stuff{
3. char job[20];
4. int age;
5. float height;
6. }Huqinwei;
也許初期看不習慣容易困惑,其實這就相當於:
1. struct stuff{
2. char job;
3. int age;
4. float height;
5. };
6. struct stuff Huqinwei;
第三種:如果該結構體你只用一個變數Huqinwei,而不再需要用。
struct stuff yourname; 去定義第二個變數。那麼,附加變數初始化的結構體定義還可進一步簡化出第三種:
1. struct{2. char job;
3. int age;
4.float height;
5. }Huqinwei;
6. C語言中的結構體類型是什麼
struct在C語言中是一個關鍵字,用於定義結構數據類型。
問題中的兩種定義的區別在於第一種是給student數據類型,重新定義了一個類型別名,而第二種則單純的表示一種叫做student的數據結構類型。兩者的主要區別在於後面直接定義變數時。如下代碼,則可以直接在結構體後面定義一個zhang_san的結構體變數。
struct
student
{
int
num;
struct
student
*next;
}zhang_san;
而第一種的定義,則會出現錯誤。
typedef
struct
student
{
int
num;
struct
student
*next;
}student
zhang_san;
擴展:
「結構」是一種構造數據類型,現在一般叫做用戶自定義數據類型,它是由若干「成員」組成的。
每一個成員可以是一個基本數據類型或者又是一個構造類型。
結構即是一種「構造」而成的數據類型,
那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和調用函數之前要先定義一樣。
定義一個結構的一般形式為:
struct結構名
{
//成員表列
};
成員表由若干個成員組成,
每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式為:「類型說明符
成員名;」。成員名的命名應符合標識符的書寫規定。例如:
struct
stu
{
int
num;
char
name[20];
char
sex;
float
score;
};
在這個結構定義中,結構名為stu,該結構由4個成員組成。
第一個成員為num,整型變數;第二個成員為name,字元型數組;第三個成員為sex,字元型變數;第四個成員為score,浮點型變數。
應注意在括弧後的分號是必不可少的。