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語言中陣列指標和結構體指標問題
樓上都說的很不錯。針對補充,我說兩句 結構體名字不是指標,結構體陣列的名字才是指標 就好像int x x不是指標,int x 2 x是常量指標 同樣 struct aa aa x x不是指標,aa x 3 x是常量指標 對於陣列int a 2 我們通常把a看成是指標 但實際上,這個指標並不存在的,a...
Delphi中的結構體與結構體指標
這個問題實際上與delphi 的語法結構有著密切的關係。因為delphi 所使用的語言是pascal 所以在pascal 中結構體與c 的結構體有著很多相似的地方。因為結構體經常被看做是一種變數型別。作為一種類的變體,結構體在宣告例項的時候就被構建了。也正是這個原因所以 delphi 的結構體並沒有...
(用結構體指標完成)定義學生結構體,包括學號 姓名 和3門課程的成績
如下 include include struct student void fun struct student b main int i printf n nthe original data n printf nno ld name s nscores t.sno,t.name for i 0...