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

C語言指向結構體的指針進階:malloc 動態分配、嵌套結構體訪問、指向結構體數組指針的三種引用模式

     編輯:C 語言基礎

指向結構體變量的指針:動態分配與嵌套訪問

struct data { int day, month, year; };
struct stu { char name[20]; long num; struct data birthday; };
main() {
    struct stu *student = malloc(sizeof(struct stu));
    scanf("%s", student->name);
    scanf("%ld", &student->num);
    scanf("%d%d%d", &student->birthday.year,
                  &student->birthday.month, &student->birthday.day);
    printf("%20s%10ld%10d//%d//%d\n",
           student->name, student->num,
           student->birthday.year, student->birthday.month, student->birthday.day);
}
  • malloc 分配堆空間,sizeof 確保大小正確。
  • 嵌套結構體成員用 student->birthday.year 逐級訪問。
  • 箭頭運算符 -> 等價於 (*student).member。

指向結構體數組的指針:三種引用方式

定義 struct stu student[4], *p; p = student;

  1. 地址法:(student+i)->member、(p+i)->member,等價 &student[i]。
  2. 指針遞增法:p++ 移向下一元素,p->member 訪問。
  3. 數組下標法:p[i].member,效果同 student[i].member。

完整輸出範例

struct stu *p, student[4] = {
    {"liying",1,{1978,5,23}}, {"wangping",2,{1979,3,14}},
    {"libo",3,{1980,5,6}}, {"xuyan",4,{1980,4,21}}
};
p = student;
for (int i=0;i<4;i++)
    printf("%20s%10ld%10d//%d//%d\n",
           (p+i)->name, (p+i)->num,
           (p+i)->birthday.year, (p+i)->birthday.month, (p+i)->birthday.day);

採用地址法 (p+i)-> 輸出四學生完整資料。

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