1. 程式人生 > >C語言複習——結構體

C語言複習——結構體

Struct 結構體

結構體是C語言中的一個很重要的東西,也算是較為高階進階的內容了(大神勿噴)。尤其是在學習資料結構,資料結構在C語言中的描述就是寫一個個結構體,定義自己的結構。

因為C語言不是面向物件的,不能寫類。但是在某種程度上結構體就是C語言中的類。可想其重要程度(學C++、Java天天都在寫類QAQ)。但是老師在教學的時候由於教學要求,沒有講到很深入,導致現在還有很多概念不清楚,今天覆習了一下,僅供個人參考,如有錯誤,歡迎批評指正,共同進步。


struct  date
{
    int day;
    int month;
};

#include <cstdio>
#include <cstdlib> struct point { int x; int y; }; struct point* getStruct(struct point*); void output(struct point); int main(int argc, char **argv) { printf("Programming Begin\n"); struct point z = {0, 0}; getStruct(&z); output(z); # 這樣很方便,直接給將一個函式傳遞到另一個函式中 output(*getStruct(&z)); # Get 騷操作有木有,給函式複製,完全沒問題,小白肯定看不懂
*getStruct(&z) = (struct point){1, 2}; output(z); return 0; } struct point* getStruct(struct point* p) { scanf("%d", &p->x); scanf("%d", &p->y); return p; } void output(struct point p) { printf("%d %d ", p.x, p.y); } void print(const struct point *p) { printf
("%d %d ", p->x, p->y); }

錯誤案例:

// 這樣寫是錯誤的,因為p是形參,在main函式中並不會改變原來的值
void getStruct(struct point p)
{
    scanf("%d %d", &p.x, &p.y);
}
void output(struct point p)
{
    printf("%d "%d", p.x, p.y);
}

typedef

C原本的方式定義結構體變數,每次都要在前面寫上一個struct,見上面point結構體。這樣非常的麻煩。typedef能夠幫上忙。

typedef struct ADate 
{
    int month;
    int day;
    int year;
} Date;
# 這樣在初始化一個Date型別的變數的時候就可以直接寫了(如下),而不用寫struct Date aDay.
# 注意這個地方在C++中是改了的,C++不用typedef也可以直接寫。因為struct在C++中也是一種類, 比較特殊的類

Date aDay;
# 但是typedef還有很多其他的用法,以及其與#define的區別,這裡不細說了
typedef long int64_t;
int64_t a = 10000000;

Union

聯合是C中一個比較有特色的東西,見到的不太多(嗯,筆者見識少)。這裡記錄一下,教程來自浙江大學翁愷老師《C語言程式設計進階》,感興趣的同學可以親自去看一下。

這裡介紹Union 的一個有趣的用法:

#include <stdio.h>

typedef union
{
    int i;
    char ch[sizeof(int)];
} CHI;

int main(int argc, char **argv)
{
    CHI chi;
    int i;
    chi.i = 1234;
    for (i = 0; i< sizeof(int);i++)
    {
        printf("%02hhX", chi.ch[i]);
    }
#   printf("Hello\n"); 測試用
    printf("\n");
    return 0;
}

上面這個程式打印出1234在計算機中的16進位制儲存方式。我的結果是FFD2040000.不同計算機的結果可能不一樣,不過大部分應該是這個結果啦。這裡看的出來,我的計算機是小端儲存的,也就是位權較低的位儲存在前面。

正常1234的十六進位制表示是04D2。這裡顯示的是D2在前面,04在後面,可見是小端。

相關推薦

C語言複習——結構

Struct 結構體 結構體是C語言中的一個很重要的東西,也算是較為高階進階的內容了(大神勿噴)。尤其是在學習資料結構,資料結構在C語言中的描述就是寫一個個結構體,定義自己的結構。 因為C語言不是面向物件的,不能寫類。但是在某種程度上結構體就是C語言中的

C語言複習 -- 結構指標與自增運算子

測試程式碼: #include <stdio.h> #include <stdlib.h> int main() {  struct student {   char *name;   int score;  };  struct stud

C 語言結構

ons nbsp span clas %d str style ret [] 1 #include <stdio.h> 2 3 #include <struct.h> 4 5 #include <string.h>

C語言結構參數變量的傳遞

結構體 函數 參數 傳遞 c語言 結構體 函數 參數 傳遞 一、前言 本文中的程序實現對員工信息結構體字段賦值並打印出來的功能。該結構體的定義如下:// 員工信息結構體 typedef struct { INT8 szEmployeeName[100];

11、C語言結構和共用

結構體數組 結構體 float add font sco 規則 student mon 一、結構體   結構體:是一種自定義的構造數據類型   用途:把不同類型的數據組合成一個整體。     結構體類型定義:     struct [結構體名]    {       類型識

C語言 Struct 結構在 Java 中的體現

修飾符 無法 輸入 更多 好用 ++ [] 的區別 import   大一整個學期完成了 C 語言的學習,大二就進入了Java 的學習。   和C語言一樣,我們都會嘗試寫一個小小的學生管理系統什麽的,學習過 C 語言同學知道,在管理系統中 Struct 結構體是個很好用的東

C語言小結--結構

1 什麼是結構體 結構體是一種聚合資料型別,它是一種資料元素的聚合。比如我們描述一個學生時,要求有他的姓名、學校、分數等等資訊,在之前的處理中,我們通常會使用單獨的資料型別來描述。比如,定義一個字串陣列來描述姓名char name[20] = "xiaoming",定義一個浮點數來描

C語言結構詳解(轉載只是為了查閱方便,若有侵權立刪)

C語言的結構體詳解 結構體(struct) 1、定義   一般格式為:          struct 結構名          {    

C語言結構 共用 列舉 typedef

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

C語言結構、列舉型別、型別定義)

結構體的定義 1、`struct 結構體名 { 成員型別 成員名; … }; 2、省略結構體名 struct { 成員型別 成員名; ... }結構體變數名; 成員可以是其他已定義結構體的型別,但不能是自己結構體的型別,可以是自己結構體的指標。 定義

C++ primer plus書之--C++函式和C語言字串, 結構, string

函式和C風格字串 要將C風格字串作為引數傳遞給函式, 表示字串的方式有三種: 1.char陣列 2.用""擴起來的字串常量 3.被設定為字串地址的char指標 來看一個例子: // c風格字串例子 #include "iostream" using namespace std

C語言結構

1.結構體 a.概念:結構是一些值得集合,這些值成為成員變數。結構的每個成員可以是不同型別的變數。 b.宣告: eg宣告一個學生資訊的結構體。 struct Stu { char name[20]; short int age;

C語言結構佔用記憶體問題

之前對結構體佔用記憶體一直很混亂,到底是按照哪個變數型別計算記憶體?還是怎麼計算?下面先看一個例子: 1 2 3 4 5 6 7 struct str1 { char a;

C語言結構給另一個同類型結構賦值: 用等號即可

看到很多C程式碼的結構體賦值都是用memcpy函式來拷貝,其實根本不需要,用等號直接賦值即可。結構體描述的是的一塊連續記憶體的記憶體佈局,同類型的一個結構體變數給另一個結構體變數賦值,使用等號編譯不會有任何問題,其效果顯然也和人直覺認為的一樣,拷貝對應記憶體。

C語言結構的訪問方法解讀

  在C語言中,對結構體的訪問一般有兩種常規方式:"."訪問和"->"訪問。那麼兩者有什麼區別呢?對C語言有一定了解的同學應該知道,我們新建一個結構體的時候,實際上就是新建了一種資料型別(比如int,char,double都是一種資料型別,只不過這些是C語言自帶的資料型別),這是一種什麼型別呢?其實,這

[流暢的 C]C語言結構轉化為字串

[流暢的 C] C語言將結構體轉化為字串 Overview 思路 直接使用 memcpy 之類的是不可以的。所以最好的做法就是定義結構體的時候就實現對字串的轉換。 就像 Python 的 __str__ 一樣。 (不好意思,博主雷打不動轉python!信仰

C語言入門-結構

 查詢學生成績: #include <stdio.h> #include <string.h>//用字串中的strlen,strcmp,strcpy等需要標頭檔案 #define N 2 void input(char no[ ][11],ch

1-C語言結構、共用、列舉

一、關鍵字說明         C語言有32個關鍵字,C語言通過關鍵字的使用使編譯器進行相關的操作          結構體對應關鍵字struct          共用體(聯合體)對應的關鍵字是union          列舉型別對應的關鍵字是enum 二、結構

C語言結構賦值問題的討論

結構體直接賦值的實現 下面是一個例項: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two

C語言結構和java的類異同

結構體跟類的概念確實有點像,尤其是跟C++中的類。先說相同點:(1)結構體和類都可以實現對於資料的封裝,比如將一輛車定義為由多個部分組成,如車身、車輪、車燈等。(2)結構體和類都是可以巢狀的,比如C/C++ code?12345struct A{struct B{int a;