c語言中的宏、指針以及結構體的簡述

目錄

一.define定義常量和宏

二.指針

三.結構體(很重要)


一.define定義常量和宏

定義:宏在c語言中相當於“文本替換”。

#include <stdlib.h>
#include <stdio.h>

//宏在 c 語言裏面相當於“文本替換”
#define MAX 100
#define ADD(x,y) x+y  //在這裏不能加分號

int main(){
     int sum=10+20;
    int sun=ADD(10,20);
    printf("%d\n",sum);    
    system("pause");
    return 0;
}

二.指針

在介紹指針之前,先來介紹一下在計算機中及其重要的“馮諾依曼體系結構”。

其簡略圖如下圖所示

可以把內存看做是一個樓層,每一個樓層都有若干個房間,比如101室可以住若干個同學;

房間編號 101 相當於計算機內存中的地址,房間內住的人 類比於內存中的數據;

一個房間的大小是1個字節(8個二進制位)。

隨機訪問:(閃現)以極低的成本訪問內存任何一個地址上的數據

指針:保存的數據的含義,就是內存的一個地址(宿舍房間號)

指針完全可以當作一個普通的整數,只不過,這個整數具有一個特定的含義,表示內存上的地址。

#include <stdlib.h>
#include <stdio.h>

int main(){
    int a=100;  //有了一個房間,房間號還不知道,房間裏面的人是100
    // p這個變量的類型是一個指針. p裏面存的內容就是房間號
    //int 類型的指針表示這個房間號裏面住的人是一個int類型的變量
    int* p=&a;  
    printf("%d\n",p);
    system("pause");
    return 0;
}

另外要說的是,一個十六進制的數字可以表示4個二進制位

下面我們來看看int*佔用幾個字節(可以看作是房間號,如何去保存)

#include <stdlib.h>
#include <stdio.h>

int main(){
    //在32位系統下,一個指針的大小佔4個字節
    //在64位系統下,一個指針的大小佔8個字節
    //但是在不同的編譯器下也會產生不一樣的結果,在vs運行
    //環境下雖說是64位操作系統,但是也有可能出現輸出爲4個字節的情況
    printf("%d\n",sizeof(int*));
    printf("%d\n",sizeof(char*));
    printf("%d\n",sizeof(double*));
    printf("%d\n",p);
    system("pause");
    return 0;
}

三.結構體(很重要)

比如描述學生,學生包含:名字+年齡+性別+學號這幾項信息

其代碼描述如下:

struct Stu{
    char name[20];//名字
    int age;//年齡
    char sex[5];//性別
    char id[15];//學號
}

具體代碼實現有:

#include <stdlib.h>
#include <stdio.h>

enum Sex{
    //枚舉
    FEMALE,
    MALE,
    UNKNOWN
};
//本質上結構體就是自定製類型,自定製類型的含義要根據具體的
//應用場景來決定.自定製結構體裏面的內容也是由內置類型/其他自定製類型構成的
struct Student{
    //寫出結構體中包含的成員
    char name[1024];  //1024 Byte ->1 KB
    int age;
    char id[1024];
    enum Sex sex;
};
//上邊的結構體等價於
tepedef struct Student Stdent;
//也可以將上邊兩個代碼進行合併,達到簡化的效果
//typedef struct Student{
    //寫出結構體中包含的成員
//    char name[1024];  //1024 Byte ->1 KB
//    int age;
//    char id[1024];
//    enum Sex sex;
//}Student;//這裏的名字可以改變,但是在後邊使用時必須與這裏的名字一致 如要改爲Stu

int main(){
    Student zhangsan={"張三",18,"1234",MALE};//Stu
    struct Student lisi={"李四",18,"1235",FEMALE};
    
    printf("%s,%s\n",zhangsan.name,lisi.name);
    
    system("pause");
    return 0;
}

最後,在這裏祝大家中秋節快樂!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章