C語言-結構體定義


typedef struct person {int val, int val1} sperson;  來定義結構體

/*
結構體演示
*/ 
#include <stdio.h>
/*
struct person {
    //以下是三個成員變量聲明語句 
    //每個成員變量代表結構體類型的一個子存儲區 
    //成員變量聲明語句不會分配內存,
    //所以不可以進行初始化 
    int age; 
    float height; 
    char name[10]; 
}; //結構體聲明語句 
typedef struct person sperson; //給結構體類型起別名 
*/ 
typedef struct person/*這個時候可以省略結構體本身的名稱*/{ 
    int age; 
    float height; 
    char name[10]; 
} sperson; 
int main() { 
    struct person prsn = {20, 1.78f, "abc"}; //結構體變量聲明  
    sperson prsn1 = {0}; //結構體變量聲明語句
    
    sperson *p_person = NULL;  //結構體指針 
    printf("年齡是%d\n", prsn.age/*prsn的age成員變量代表的子存儲區*/);  
    printf("身高是%g\n", prsn.height/*prsn的height成員變量代表的子存儲區*/); 
    printf("姓名是%s\n", prsn.name/*prsn的name成員變量代表的子存儲區*/);
    p_person = &prsn;  //結構體指針指向存儲區 
    printf("年齡是%d\n", p_person->age/*prsn的age成員變量代表的子存儲區*/); 
    printf("身高是%g\n", p_person->height/*prsn的height成員變量代表的子存儲區*/); 
    printf("姓名是%s\n", p_person->name/*prsn的name成員變量代表的子存儲區*/); 
    prsn1 = prsn; //同類型結構體變量之間可以直接賦值 
    //prsn1里的數據都來自於prsn  
    printf("年齡是%d\n", prsn1.age); 
    printf("身高是%g\n", prsn1.height); 
    printf("姓名是%s\n", prsn1.name); 
    return 0; 
} 

在一個結構體里面使用另外一個結構體

/*
結構體演示
*/ 
#include <stdio.h>
typedef struct {
    int row;  //記錄點的行號
    int col;  //記錄點的列號 
} pt;  //記錄點位置的結構體 
typedef struct {
    //兩個成員變量記錄相對的兩個點的位置  
    pt pt1; 
    pt pt2; 
} rect;  //記錄水平長方形位置的結構體 
int main() { 
    int area = 0; 
    rect r = {0};   //記錄水平長方形的位置 
    pt mid = {0}; //記錄中心點的位置 
    rect *p_rect = &r; //指向r存儲區的位置 
    pt *p_mid = &mid; //指向mid變量存儲區的指針
# if  0 
    printf("請用戶輸入水平長方形的位置:"); 
    scanf("%d%d%d%d", &(r.pt1.row), &(r.pt1.col), &(r.pt2.row), &(r.pt2.col)); //把用戶輸入的四個記錄在r的四個整數類型子存儲區里 
    area = (r.pt1.row - r.pt2.row)/*兩個點的行號相減得到長或者寬*/ * (r.pt1.col - r.pt2.col); /*兩個點的列號相減得到長或者寬*/  //用長乘以寬得到長方形的面積 
    area = area >= 0 ? area : 0 - area;
    mid.row = (r.pt1.row + r.pt2.row) / 2; //得到中心點的行號並記錄到mid變量的存儲區里 
    mid.col = (r.pt1.col + r.pt2.col) / 2; //得到中心點的列號並記錄到mid變量的存儲區里  
    printf("面積是%d\n", area);
    printf("中心點的行是%d, 中心點的列是%d\n", mid.row, mid.col);
 
#endif  
    printf("請用戶輸入水平長方形的位置:"); 
    scanf("%d%d%d%d", &(p_rect->pt1.row), &(p_rect->pt1.col), &(p_rect->pt2.row), &(p_rect->pt2.col)); 
    printf("%d\n", p_rect->pt1.row);
    area = (p_rect->pt1.row - p_rect->pt2.row) *(p_rect->pt1.col - p_rect->pt2.col); 
    area = area >= 0 ? area : 0 - area;
    printf("面積是%d\n", area); 
    p_mid->row = (p_rect->pt1.row + p_rect->pt2.row) / 2; 
    p_mid->col = (p_rect->pt1.col + p_rect->pt2.col) / 2; 
    printf("中心點的位置是(%d %d)\n", p_mid->col, p_mid->row); 
    return 0; 
}

 3.結構體大小演示,不足四個字節,也填充為4個字節

/*
結構體大小演示
*/
#include <stdio.h>
typedef struct { 
    char buf[2]; 
    int val; 
} tmp; 
typedef struct { 
    char ch;  
    char ch1; 
    int val;
} temp1; 
int main() {
    printf("sizeof(tmp)是%d\n", sizeof(tmp)); 
    printf("sizeif(tmp)是%d\n", sizeof(temp1)); 
    return 0; 
} 

定義結構體的返回值

/*
結構體演示
*/
#include <stdio.h>
typedef struct {
    int row;
    int col; 
} pt; 
pt * read(void) {
    static pt p_t = {0};
    printf("請輸入長和寬:"); 
    scanf("%d%d", &p_t.row, &p_t.col); 
    return &p_t;     
}
void print(pt *p_pt) {
    printf("輸入的長是%d, 輸入的寬是%d\n", p_pt->row, p_pt->col); 
}
int main() {
    pt *p_r = read(); 
    print(p_r); 
    return 0; 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM