1. 程式人生 > >[TwistedFate]結構體,結構體陣列,typedef

[TwistedFate]結構體,結構體陣列,typedef

1.結構體

關鍵字 struct

 struct 結構體名字(首字母大寫){

資料型別1 變數名1;

資料型別2 變數名2;

.....

 };

//宣告一個描述學生的結構體

//結構體中宣告的變數一般叫做成員變數

struct Student {       // 注意兩個變數之間用分號分隔
    char name[20];
    char sex;
   double number;
    float score;
    int age;
};             

//定義一個結構體變數

// struct結構體名變數名 = {初值};

//初值的順序需要跟宣告時相同

匿名結構體:

struct{
 int num; 
char name[20]; 
char sex;
float score;
}stu1 = {1,”wukong”, ‘m’,99.5f},stu2 = {2, “bajie”, ‘m’, 65.0f}; 

取出結構體中成員變數的值

//結構體變數 . 成員變數 =

注意:變數的資料型別,變數以前全是資料型別

舉例:結構體作為函式引數

void printStudent(structStudent stu);

//宣告一個日期的結構體
struct Date{
    int year;
    int month;
    int day;
};
// 宣告一個家庭成員的結構體
struct Family{
    char mother[20];
    char father[20];
};
// 需求:描述一個名字與出生年月日和家庭成員
// 結構體仲可以有其他結構體作為成員變數
struct Person{
    char name[20];// 結構體可以巢狀結構體
    Date day;
    Family family;

結構體變數可以直接進行賦值賦值的過程是一個拷貝的過程

陣列不能進行直接賦值陣列名字是首元素地址是常量是程式執行期間不能改的

結構體在記憶體當中計算佔多少位元組:

1.計算的順序由上自下依次計算

2.一個成員變數一個成員變數的計算

3.並且自動補齊為該結構體重所佔最大位元組的變數的位元組數來進行補齊

:如果結構體中最大的是float就按4的倍數補齊哦最大的是double就按8的倍數補齊

#pragma pack(1)// 取消結構體自動補齊

為型別起別名:

使用關鍵字 typdeof老名字新名字

// 使用teypedef定義結構體
struct student { 
...
};
typedef struct student Student;
或者連在一起寫
typedef struct student { 
...
}Student;


2.結構體陣列

struct Student stu1 = {"Faker", 'x', 1, 100, 18};
  struct Student stu2 = {"Ryu",'x', 100, 60, 20};
struct Student stu3 = {"Wx",'x', 1, 95, 23};
struct Student studentArray = {stu1, stu2, stu3};


相關推薦

[TwistedFate]結構,結構陣列,typedef

1.結構體 關鍵字 struct  struct 結構體名字(首字母大寫){ 資料型別1 變數名1; 資料型別2 變數名2; .....  }; //宣告一個描述學生的結構體 //結構體中宣告的變數一般叫做成員變數 struct Student { // 注意

C語言之結構 共用 列舉 typedef

結構體型別和結構體變數, struct 定義結構體型別時 不佔記憶體 匿名結構體,無法建立變數訪問,有限的結構體型別變數 結構體變數不能整體引用,只能引用變數成員 結構體變數用大括號賦值,只有在建立並初始化的時候才可以 #define _CRT_SECURE_NO_WARN

C++:對結構中字元陣列賦值時,出現表示式必須是可修改的左值的問題

問題描述:         在C++中為結構體中的字元陣列賦值時,出現”表示式必須是可修改的左值“的錯誤提醒,編譯報錯“不可指定資料型別”。           &n

結構指標和陣列的使用

同種型別的結構體是可以進行賦值的 【1】結構體陣列 (1)結構體陣列的定義 1)具有相同結構體型別的結構體變數也可以組成陣列,稱它們為結構體陣列。 結構體陣列的每一個數組元素都是結構體型別的資料,它們都分別包括各個成員(分量)項。 2)定義結構體陣列的方法和定義結構體變數的方法相仿

C#呼叫C/C++動態庫 封送結構,結構陣列

一. 結構體的傳遞 Cpp程式碼    #define JNAAPI extern "C" __declspec(dllexport) // C方式匯出函式   typedef struct       {         int osVersion;  

結構struct前面加 typedef和不加typedef的區別

直接把結構名定義為am_win_menutext然後使用,這樣在使用時必須這樣:   struct am_win_menutext myval   定義了別名之後就可以:   am_win_menutext myval   這樣可以更清晰。   主要在c語言裡這樣使用 使

結構轉為字串陣列

        在工作中需要進行傳送一包資料,而且資料的格式各不一樣,只能定義為結構體的形式,但是傳送方式以字串的形式進行傳送,這樣就需要將結構體型別的變數轉換為字串陣列。下面只是,自己定義的結構體進行的轉換,其他的形式都是一樣的。在合併的時候一定要注意前面陣列的長度一定要在

c語言結構中動態陣列的使用

【背景】 c語言結構體中動態陣列使得使用者能夠根據需要來申請空間,相比靜態陣列,更能有效利用儲存空間。 【正文】 1. 動態陣列在結構體中間 #include <stdio.h> #include <stdlib.h> #include <

day07 結構 匿名結構 結構的初始化 訪問 結構巢狀 結構的儲存空間 結構陣列

//結構體的定義/*  struct 結構體的定義{  資料型別成員變數1;  資料型別成員變數2;  .....  資料型別成員變數n;  }; 注意“;”  *///typedef(第一種方式)//先定義結構體,在說明結構體變數//struct myPoint{//    float x;//行座標// 

結構&結構陣列

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

C# 呼叫dll 封送結構 結構陣列

一. 結構體的傳遞 cpp 程式碼 #define JNAAPI extern "C" __declspec(dllexport) // C方式匯出函式 typedef struct { int osVersion; int majorVe

結構轉為char陣列 & char陣列轉為結構

The same as 結構體轉為Memory  & Memory 轉為結構體 struct A { int a; int b; int c; int d; float e; //pointer...... };

Linux 字元裝置驅動結構(三)—— file、inode結構及chardevs陣列等相關知識解析

       先看下面這張圖,這是Linux 中虛擬檔案系統、一般的裝置檔案與裝置驅動程式值間的函式呼叫關係;         上面這張圖展現了一個應用程式呼叫字元裝置驅動的過程, 在裝置驅動程式的設計中,一般而言,會關心 file 和 inode 這兩個結構體  

VC結構實現類似陣列的下標操作符功能

在某些特殊時候,我們會想如果結構體也能向陣列一樣通過下標操作符進行操作的話,程式碼將直接通過迴圈語句就能實現,尤其當我們的資料來源於資料庫獲得的資料集時,這種用法還是比較有意思的。 結構體的下標操作這裡只做技術上研究,實際開發中非常不提倡這麼用。原因是這種結構體當成員很多時

巨集(#define)和類型別名(typedef)在結構和共用(聯合體)型別定義中的應用

在學習cocos2d-x的過程中,經常看到各種大寫的識別符號,有些是自定義的巨集,有些是複雜型別的別名。前者用#define來實現,後者用typedef來實現。它們的存在有兩個共同目的(當然還有其他不同的目的),一是用簡單的識別符號來代替複雜的程式碼,二是(在條件編譯語句的

結構:struct 和 typedef struct應該以及結構的建構函式 區別

主要記錄 struct 和 typedef struct的筆記 # include <iostream> using namespace std; struct Student {

6.陣列&字串&結構&共用&列舉

1.程式中記憶體從哪裡來1 1.1、程式執行需要記憶體支援 ()對程式來說,記憶體就是程式的立足之地(程式是被放在記憶體中執行的);程式執行時需要記憶體來儲存一些臨時變數。 1.2、記憶體管理最終是由作業系統完成的 (1)記憶體本身在物理上是一個硬體器件,由硬體系統提

Unity與c++ 結構中帶陣列引數傳遞

在unity與c++ 進行互動中往往會有結構體的資料傳遞,如果在結構體中定義了陣列,那麼在unity中需要怎樣去定義結構體從而對應c++中定義的帶有陣列的結構體呢. 請看程式碼: #ifndef TRACK_H_H_ #define TRACK_H_H_ #define

Linux 字元裝置驅動結構(三)—— file、inode結構及chardevs陣列等相關知識解析[轉載]

       先看下面這張圖,這是Linux 中虛擬檔案系統、一般的裝置檔案與裝置驅動程式值間的函式呼叫關係;        上面這張圖展現了一個應用程式呼叫字元裝置驅動的過程, 在裝置驅動程式的設計中,一般而言,會關心 file 和 inode 這兩個結構體       

C語言中結構與字元陣列之間的相互轉換

#include <stdio.h> #include <stdlib.h> #include <string.h> #pragma  pack(push)  //儲存對齊狀態   #pragma  pack(1)   typedef st