首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言結構體指針進階:指向結構體變量與結構體數組的指針操作實戰

     編輯:關於C語言

結構體指針:靈活操作複雜數據結構的利器

指針可指向任意類型,指向結構體類型變量/數組時,通過 -> 運算符訪問成員,代碼簡潔高效。本文覆蓋指向單個結構體變量、結構體數組的指針定義、內存分配、成員訪問三種形式。

一、指向結構體變量的指針

定義與內存分配


struct stu {
    char name[20];
    long number;
    float score[4];
};
struct stu *p1, *p2;  // 定義指針

// 必須分配內存才能使用
struct stu *student = malloc(sizeof(struct stu));

關鍵: 指針定義後未指向有效內存,**必須用 malloc 分配**,否則解引用導致未定義行為。sizeof 返回類型字節數。

成員訪問:指針->成員


scanf("%s", student->name);
scanf("%ld", &student->number);
scanf("%d%d%d", &student->birthday.year, &student->birthday.month, &student->birthday.day);

printf("%20s%10ld%10d/%d/%d", student->name, student->number,
       student->birthday.year, student->birthday.month, student->birthday.day);

嵌套結構體 birthday 成員鏈式訪問:student->birthday.year。

二、指向結構體數組的指針

定義與綁定


struct stu student[4], *p;
p = student;  // p 指向數組首元素 student[0]

student 為數組名即首地址,p 指向首元素。

三種元素訪問形式

形式語法說明
1. 地址法(student+i)->member / (p+i)->memberstudent+i / p+i 為第 i 元素地址,等價 &student[i]
2. 下標法student[i].member / p[i].memberp[i] 等價 *(p+i),語法直觀
3. 指針遞增法p->member; p++;遍歷數組時高效,但需保存首地址以便重置

嵌套結構體成員訪問示例


(p+i)->name
(p+i)->num
(p+i)->birthday.year
(p+i)->birthday.month
(p+i)->birthday.day

掌握 malloc 為結構體指針分配內存、-> 運算符鏈式訪問嵌套成員、三種數組元素訪問形式的等價性與適用場景,能讓你靈活高效地操作結構體數據,是系統級、嵌入式、數據結構編程的基石技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved