結構體指標陣列與結構體陣列有什麼不同

時間 2021-07-08 21:32:48

1樓:

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做型別名稱就可以了

2樓:資料之路

a 是結構體陣列,a[100]等於 開闢了100個 該結構體的 空間b 是結構體 等於開闢了一個結構體的空間

c 是指向該結構體的指標陣列,開闢了三個空間,每個空間裡存放一個指向該結構體的指標。

d 為指向結構體的指標。

malloc 為動態分配陣列的時候用,具體用法如int* p;

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

3樓:匿名使用者

結構體指標其實是一個指標,它儲存的是指向某個結構體的“地址”,所以結構體指標陣列儲存的其實是指向一組結構體的“地址”陣列,它本身並不包含結構體的具體內容(沒有被分配記憶體)

所以當用到他們時,要麼重定向,比如:

d=&b; //讓d指向b,d儲存的是b的地址,這樣就能通過d來呼叫b了

要麼用malloc為他們分配記憶體:

d=(struct h *)malloc(sizeof(struct h));

這樣d就指向系統為其分配的一塊記憶體,其內容就是struct h中的東西

如何定義結構體指標陣列

4樓:匿名使用者

你只是申請結構體指標陣列,每個元素都是結構體指標,注意,這些都是指標,而指標所指向的結構體空間卻沒有申請新的結構體或者指向一個存在的結構體。

std[1]->id //表示std[1]所指結構體中的項id,但是你指向指向的結構體卻不知道是哪個·~

std[1]=(struct student *)malloc(sizeof(struct student));

//為std[1]指標指向申請的結構體

5樓:簫韶九成鳳凰來儀

struct studen *(std[4])

C語言,結構體中的陣列怎麼賦值,C語言中結構體中的陣列,不能直接賦值嗎

1 用字元常量逐個初始化陣列。例如 char a 8 把8個字元依次分別賦給c 0 c 7 這8個元素。如果在定義字元陣列時不進行初始化,則陣列中各元素的值是不可預料的。如果花括號中提供的初值個數 即字元個數 大於陣列長度,則出現語法錯誤。如果初值個數小於陣列長度,則只將這些字元賦給陣列中前面那些元...

定義了結構體,結構體有個成員變數是指標型別,而這個變數有是結構體,請問怎麼對這個指標初始化

例如有a,b兩個結構體,a中有b 在main中需要先初始化個b,完成b之後,然後呼叫a.b,這樣就可以完成了!如果直接呼叫a的話,有可能溢位 沒賦具體值時都給null就好 struct a a struct a malloc sizeof struct a memset a,0,sizeof str...

c語言中結構體中有二維陣列怎樣賦初值

最基本的方法就是 mx 0 name 0 x mx 0 information 0 0 x 以此類推 陣列不能整體直接賦值,以下情況除外 1.初始化時賦值 typedef struct star char name 8 char information 2 2 mx mx mx 2 為了你能看清楚m...