結構體指針變量的定義


最近在STM的GPIO結構體定義中看到源代碼的時候,順便復習下結構體指針變量的定義及typedef 的使用。

1.結構體類型定義

定義方式1:

Typedef struct LNode { int data; // 數據域 struct LNode *next; // 指針域 } *LinkList;

定義方式2:

struct LNode { int data; // 數據域 struct LNode *next; // 指針域 }; Typedef struct LNode *LinkList;

以上兩個定義方式是等價的,是將 *LinkList 定 義為 struct LNode 類型,即 LinkList 被定義為一個類型名。這樣就可以用 LinkList來定義說明新的變量了,如:

LinkList L;


結構體變量與結構體指針變量的使用方法

一、結構體的定義格式一般如下:

 

Typedef struct SCI

{

    U8 data[MAXLEN];

     U16 pos;

}TSCI;

 

二、訪問結構體成員的基本方法有兩種:

1、定義一個結構體變量直接訪問成員變量;

2、定義一個結構體指針變量間接訪問結構體變量。

 

(1) 結構體變量訪問

TSCI  Sci1;

Sci1.data [ Sci1.pos++]= num;

(2) 結構體指針變量訪問

TSCI   *Sci2,b;

Sci2= &b;    //指針變量必須初始化    指向一個結構體變量

Sci2->data[Sci2->pos++] = num;

 

(3)(*Sci1).data    Sci2->data   效果等效

 

三、如何實現結構體被其他函數調用

  假設A文件中定義了一個結構體,B文件可以對A中定義的結構體進行訪問和修改數據。

1、 在A.h中定義結構體

 

Typedef struct SCI

{

U8 data[MAXLEN];

 U16 pos;

}TSCI;

 

2、在A.c文件中聲明一個結構體變量

 

TSCI Sci;

3、要實現B.c文件能夠調用A中的結構體,需要做到兩點:

 (1)在B.h中包含A.h頭文件; 

(2)A.c中實現返回結構體變量地址的函數。

     實現函數如下:

TSCI *  Get_Address(void)   //返回結構體變量的地址  (此TSCI結構體須在A.h中定義)

{

    Return &Sci;

}

(4)在B.c中定義一個結構體指針變量,通過調用Get_Address函數得到Sci的地址,將此地址賦給B.h中定義的結構體指針變量。

     TSCI *pSci2;

     pSci2 = Get_Address();

     pSci2->data[pSci2->pos++]=num;

 

     這樣就可以實現對A.c中的結構體變量Sci的數據訪問、修改。

 


免責聲明!

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



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