變長結構體套變長結構體怎麼用

2025-02-05 13:10:07 字數 3275 閱讀 8023

1樓:網友

什麼是變長?char b[1];

struct a

int a;

char b[1];

struct b

int a;

struct a c[1];

int main()

printf("strlen is %d,strlen b is %d",sizeof(struct a),sizeof(struct b));

return 0;

長度都是固定的,如果不按照位元組對齊 a的大小是8,b是12如果#pragma pack(1)

則a的大小是5,b是9

2樓:冰封一世

不要誤人子弟啊,用動態開闢就夠可以實現變長結構體。

結構體最後d的變長陣列

3樓:網友

要看情況。

如果結構定義成這個樣子:

typedef struct

array;

那麼使用的時候必須為他分配一塊很大的記憶體,否則就會出現你說的情況,a裡只能包含1個元素。

如果定義成:

要看情況。如果結構定義成這個樣子:

typedef struct

array;

這就需要為a單獨再申請一塊記憶體,a裡能裝多少取決於你為a單獨申請了多大的記憶體。

結構體指標p加1後為什麼結構體會變長

4樓:網友

你說的情況是p沒有指向struct student 型別的變數,而是指向變數中的某乙個元素.比如。

struct student

stu[10];

struct student *p;

p=(struct studnet *)stu[0].name;

那麼執行p+1後的情況吧.

原來的struct student型別的長度是12(2+10);

現在呢,把stu[0].name強制轉換成結構體型別,那麼stu[0].name就不是10個長度,而應該是乙個struct student型別的長度,那麼整個struct student 現在的長度就是14(int + struct student),p+1使struct student 型別的長度增加了.p+1應該指向下乙個name.

不定長的結構體定義

5樓:安心播音

結構體可以這樣:

typedef struct item

item;每次為乙個新的 item 申請空間時,申請大小為:

sizeof(item) +idatasize這裡的 idatasize 就是你想儲存的活用空間大小。

呼叫的時候,直接寫結構體的 acdata[n] 就可以了,可能會浪費幾個位元組的空間,但這些應該可以忽略。

原理是將 acdata[0] 當作資料開始的部分,而 acdata[n] 雖然越界了,但在你申請的空間範圍內,所以不會有問題。

另外一種方法是在結構體裡宣告乙個指標,用指標來記錄資料的位置。

怎麼訪問結構體裡的另乙個結構體的變

6樓:網友

struct a }

用a::b可以訪問到這個結構b。然後。。。用。訪問。::好像也可以。

7樓:網友

可以巢狀定義結構體的。

8樓:網友

struct a

struct b

void main()

這個是c語言的訪問方式。

有問題請追問 滿意記得采納。

怎麼把android的字串變成結構體

9樓:

在android的上層是沒有結構體的,只有陣列,如果你想在下層將字串解析為結構體的形式,只有通過jni呼叫的方式來協議好你的解析方式 !

介紹c語言結構體套結構體

10樓:本睿好

jugelizi struct studentscore; /*宣告結構體變數score*/struct infostruct /*結構體infostruct的定義*/info; /*宣告結構體變數info*/};

11樓:一馬一天下

結構的定義。

定義乙個結構的一般形式為:

struct 結構名。

成員表由若干個成員組成,每個成員都是該結構的乙個組成部分。

對每個成員也必須作型別說明。

例如:struct stu

結構型別變數的說明。

結構體定義並不是定義乙個變數,而是定義了一種資料型別,這種型別是你定義的,它可以和語言本身所自有的簡單資料型別一樣使用(如 int )。

結構體本身並不會被作為資料而開闢記憶體,真正作為資料而在記憶體中儲存的是這種結構體所定義的變數。

乙個結構體變數佔多大記憶體空間呢?這是由這種結構體型別的定義決定的,可以想象為了同時儲存結構體的每乙個成員,那麼結構體變數的儲存大小,就應該是所有分量的儲存空間的總合。

說明結構變數有以下三種方法。以上面定義的stu為例來加以說明。

先定義結構,再說明結構變數。 如:

struct stu

struct stu boy1,boy2;

說明了兩個變數boy1和boy2為stu結構型別。

也可以用巨集定義使乙個符號常量來表示乙個結構型別, 例如:

#define stu struct stu

stu;stu boy1,boy2;

在定義結構型別的同時說明結構變數。例如:

struct stu

boy1,boy2;

直接說明結構變數。

例如:struct

boy1,boy2;

第三種方法與第二種方法的區別在於第三種方法中省去了結構名,而直接給出結構變數。

說明了boy1,boy2變數為stu型別後,即可向這兩個變數中的各個成員賦值。

在上述stu結構定義中,所有的成員都是基本資料型別或陣列型別。成員也可以又是乙個結構, 即構成了巢狀的結構。

例如:struct date

structboy1,boy2;

使用結構變數成員的一般形式是:

結構變數名。成員名。

例如:/*即第乙個人的學號 */

如果成員本身又是乙個結構則必須逐級找到最低階的成員才能使用。

例如:即第乙個人出生的月份成員可以在程式中單獨使用,與普通變數完全相同。

有關結構體的運用問題,結構體問題求解答謝謝

include using namespace std typedef struct pan int flag int barriy int direction int data pan int main pan locate int i,j for i i i 你太粗心了,這裡應該 for j j...

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

例如有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...

染色體結構變異的機理

一 斷裂 重接假說 斷裂 癒合假說 自發或誘發情況下,染色體可能斷裂,產生粘性末端,這種末端可發生3種情況 1 通常通過修復過程按原先的順序重接,重新癒合或恢復 restitution 2 斷裂末端不與另外的斷裂末端癒合,結果沒有著絲點的染色體部分丟失,有著絲點的染色體部分 封閉 起來。3 不按原初...