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 不按原初...