1. 程式人生 > >(語法)理解結構指標和動態分配記憶體

(語法)理解結構指標和動態分配記憶體

    結構體即我們自定義的資料型別,平時經常用到,結構體指標即將指標加入到一個型別中,理解結構體指標對學習指標可以進一步深入理解,並在連結串列等格式中運用非常廣泛,以下面程式舉例分析:

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

struct student{ 
char *name; 
int score; 
struct student* next; 
}; 
student stu;
student* stu1;
int main(){ 
stu.name = (char*)malloc(sizeof(char)); /*1.結構體成員指標需要初始化*/ 
strcpy(stu.name,"Jimy"); 
stu.score = 99; 

stu1 = (struct student*)malloc(sizeof(struct student));/*2.結構體指標需要初始化*/ 
stu1->name = (char*)malloc(sizeof(char));/*3.結構體指標的成員指標同樣需要初始化*/ 
stu.next = stu1; 
strcpy(stu1->name,"Lucy"); 
stu1->score = 98; 
stu1->next = NULL; 
printf("name %s, score %d \n ",stu.name, stu.score); 
printf("name %s, score %d \n ",stu1->name, stu1->score); 
free(stu1); 
return 0; 
} 
結構體的定義struct student
{
   char* name;
   int score;
   student* next;
};
    struct用來定義一個結構體型別,後面跟一個型別名字,這裡是student(和int,char一樣,只是個型別名),在下面的{}中,是這個結構體中的資料型別。第一個是定義了char型的指標變數name,第二行定義了int變數score,第三行定義了我們剛才自定義的資料型別student型的指標變數next。
    下面的student stu;和studeng* stu1;分別定義了student型別的變數stu和student型別的指標變數stu1。
    在下面的主函式中,stu.name = (char*)malloc(sizeof(char));
是為變數stu中的指標變數name動態開闢一塊記憶體來給指標變數name使用,右值得意思是:獲取char型別的大小,為它動態分配一塊記憶體,並把它強制型別轉換為char。最後就把這個開闢出來的記憶體的首地址作為返回值傳遞給指標變數name。
    下面的 strcpy(stu.name,"Jimy");就開始為就開始為指標name賦值了,即將字串“jimy”賦值給變數stu的name。
    下面stu1 = (student*)malloc(sizeof(student))這一句是動態分配一個student型別的記憶體空間,將他的首地址賦值給指標變數stu1,即stu1就有了一個student型別的記憶體地址可供使用。
    下面的stu1->name = (char*)malloc(sizeof(char));
同樣在指標變數stu1記憶體中的name指標型別也需要將他初始化為它分配一個記憶體空間以供使用。
    後面的stu1->score = 98; stu1->next = NULL;是為stu1變數中的兩個資料型別賦值,注意的是如用指標來便是結構變數,那就可以用->來直接引用該變數下面的物件。
下一篇主要分析結構體指標在連結串列中的應用及用法,還是要深入理解指標及其用法。