結構體指標陣列

2021-07-29 14:18:27 字數 1303 閱讀 2718

struct h

a[100],b,*c[3],*d;

a是乙個結構體陣列,已經有100個節點了。不需要再分配空間了。

b是乙個結構體變數,也已經有空間了,就和int b;已經有空間了一樣。

c是乙個指標陣列,c也已經有空間了,有3個元素,但是這三個元素是還沒有分配空間的指標,所以要用malloc分別為他們分配記憶體。

d是乙個結構體指標,和int *d;一樣還要為他分配記憶體空間;

其實結構體就可以理解為是一種和int這些一樣的資料型別,它在定義變數和指標這方面的操作和基本資料型別是一樣的。

比如:struct name na;

int ia;

這裡的na是型別struct name;的乙個變數。而ia是int型別的乙個變數。

struct name* np;

int* ip;

這裡的兩個指標也是一樣的,只是型別不同。

可以這樣分配記憶體。

1. np = &na; ip = &ia;

2, np = (struct name*)malloc(sizeof(struct name));

ip = (int*)malloc(sizeof(int));

宣告陣列也是一樣的。

比如:struct name narray[100];

int iarray[100];

iarray就是有100個int型的變數。

narray也是一樣的有100個struct name 這種型別的變數。

指標陣列也是一樣的。

struct name* nparray[10];

int* iparray[10];

iparray表示有10個整型的指標。

nparray表示有10個struct name型別的指標。

宣告動態陣列的方式也是一樣的。

struct name* dynarry;

int* dyiarray;

比如我們要申請100個節點的陣列

dynarray = (struct name*)malloc(100 * sizeof(struct name));

dyiarray = (int *)malloc(100 * sizeof(int));

其實資料結構就是我們自己定義的一種型別。所以在宣告變數的時候和基本資料型別(比如:int)是沒有什麼分別。

如果你覺得struct name的型別名稱太長了。你可以用typedef來定義

例如: typedef struct name name;

以後就直接用name做型別名稱就可以了

陣列指標 結構體指標

指向指標結構體 include include int main struct student stu 1 定義struct student型別的變數stu1 struct student p 定義指向struct student型別資料的指標變數p p stu 1 p指向stu1 stu 1.nu...

結構體 指標 陣列

若我們用 0x9999 來標記記憶體位址,則 0x9999 表示該位址記憶體中儲存的數值 變數int a a 0x9999 1 a 0x9999 指標int a a 0x8888 0x9999 a 0x8888 0x9999 1 a 0x8888 結構體變數 struct mystruct s s ...

結構體指標和結構體陣列

struct ha 100 b,c 3 d 結構體指標其實是乙個指標,它儲存的是指向某個結構體的 位址 所以結構體指標陣列儲存的其實是指向一組結構體的 位址 陣列,它本身並不包含結構體的具體內容 沒有被分配記憶體 所以當用到他們時,要麼重定向,比如 d b 讓d指向b,d儲存的是b的位址,這樣就能通...