結構體的應用技巧

2021-06-02 21:45:34 字數 885 閱讀 5881

幾天前同事感覺我們的驅動**中,有幾個地方出錯了。原因是,申請了兩個結構體(a和b)的空間,呼叫mmset()初始化為0後,就直接引用,該結構體a裡的值了,感覺沒做初始化。經過我倆的**,得出結論,這是申請結構體空間,巧妙得到結構體b的一種方法。例子如下:

#include

#include

struct aa;

struct bb;

int main(void)

{struct aa *a_a;

struct bb *b_b;

char *p=null;

int i;

int len=sizeof(struct aa)+sizeof(struct bb);

a_a=(struct aa *)malloc(len);

p=(char *)a_a;

b_b=(struct bb *)&a_a->a4;

a_a->a1=0;

a_a->a2=1;

a_a->a3=2;

a_a->a4=3;

/********************************************/

b_b->b1=4;

b_b->b2=5;

b_b->b3=6;

for(i=0;iprintf("-----%d\n",*p++);

return 0; }

結果如下:

-----0

-----1

-----2

-----4

-----5

-----6

-----0

由此可以看出,結構體a_a中的a4的作用就是定位結構體b_b的位置;這個例子可以在v4l2中找到應用。水平有限,如果理解有誤或有更深作用的請指教。

MATLAB struct結構體的應用

與建立數值型陣列一樣,建立新struct物件不需要事先申明,可以直接引用,而且可以動態擴充。比如建立乙個複數變數x x.real 0 建立欄位名為real,並為該字段賦值為0 x.imag 0 為x建立乙個新的字段imag,並為該字段賦值為0 x real 0 imag 0 然後可以將其動態擴充為陣...

C 結構體的應用

注意,第17行這裡結構體型別定義的形參只能是引用型別的,memcpy與strcpy的比較 memcpy是複製位址內的內容,例如如下 所示 從 char s開始賦給array,位址賦值的大小是s strcpy只能複製字串,其他的複製字串以外的內容。結構體作為型別進行寫入和讀出 include incl...

結構體指標的應用理解

在cjson呼叫時遇到的結構體引數賦值時的問題,需要cjson 才行,下面兩種方法都行,對比一下。也對指標理解更深入 結構體給函式當形參時,由於主函式裡也沒分配結構體空間,只有結構體的位址,區域性函式裡面只能給區域性結構體位址,給結構體的位址放在結構體位址的空間中,要有存放結構體位址空間的位址,也就...