结构体的传参理解成员的存储方式
生活随笔
收集整理的這篇文章主要介紹了
结构体的传参理解成员的存储方式
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
結(jié)構(gòu)體的成員變量在內(nèi)存中存儲(chǔ)的方式,決定于設(shè)定的內(nèi)存對(duì)齊方式是幾字節(jié):gcc編譯默認(rèn)使用4字節(jié)對(duì)齊:
1 #include <stdio.h> 2 3 typedef struct test_buf 4 { 5 int a; 6 char c; 7 char buf[8]; 8 char *str; 9 10 }buf_t; 11 12 void test_send_srtbuf(void *arg) 13 { 14 //buf_t *revbuf = (buf_t *)arg; 15 buf_t *revbuf = arg; 16 printf("revbuf->a=%d,revbuf->c=%c,revbuf->buf=%s,revbuf->str=%s\n",revbuf->a,revbuf->c,revbuf->buf,revbuf->str); 17 //char *testbuf = arg; 18 //printf("testbuf=%s,testbuf大小為:%d\n",testbuf,sizeof(testbuf)); 19 return; 20 } 21 int main(void) 22 { 23 int len = 0; 24 char revbuf[30] = {0}; 25 buf_t buf={ 26 .a = 25, 27 .c = 'b', 28 .buf="hello wr", 29 .str = "w143bd", 30 }; 31 len = sizeof(buf); 32 printf("len =%d.\n",len); 33 printf("buf.a=%d ,buf.c=%c, buf.buf=%s, buf.str=%s\n",buf.a,buf.c,buf.buf,buf.str); 34 test_send_srtbuf(&buf); 35 return 0; 36 }
上面程序的運(yùn)行結(jié)果: 調(diào)用test_send_strbuf時(shí),參數(shù)被解析為了void類型,解析時(shí)為了防止數(shù)據(jù)錯(cuò)亂,將它強(qiáng)制類型轉(zhuǎn)換為結(jié)構(gòu)體類型,賦值給了另一個(gè)變量,就可以訪問(wèn)成員的值。
1 #include <stdio.h> 2 3 typedef struct test_buf 4 { 5 int a; 6 char c; 7 char buf[8]; 8 char *str; 9 10 }buf_t; 11 12 void test_send_srtbuf(void *arg) 13 { 14 //buf_t *revbuf = (buf_t *)arg; 15 buf_t *revbuf = arg; 16 printf("revbuf->a=%d,revbuf->c=%c,revbuf->buf=%s,revbuf->str=%s\n",revbuf->a,revbuf->c,revbuf->buf,revbuf->str); 17 //char *testbuf = arg; 18 //printf("testbuf=%s,testbuf大小為:%d\n",testbuf,sizeof(testbuf)); 19 return; 20 } 21 int main(void) 22 { 23 int len = 0; 24 char revbuf[30] = {0}; 25 buf_t buf={ 26 .a = 25, 27 .c = 'b', 28 .buf="hello wr", 29 .str = "w143bd", 30 }; 31 len = sizeof(buf); 32 printf("len =%d.\n",len); 33 printf("buf.a=%d ,buf.c=%c, buf.buf=%s, buf.str=%s\n",buf.a,buf.c,buf.buf,buf.str); 34 test_send_srtbuf(&buf); 35 return 0; 36 }
上面程序的運(yùn)行結(jié)果: 調(diào)用test_send_strbuf時(shí),參數(shù)被解析為了void類型,解析時(shí)為了防止數(shù)據(jù)錯(cuò)亂,將它強(qiáng)制類型轉(zhuǎn)換為結(jié)構(gòu)體類型,賦值給了另一個(gè)變量,就可以訪問(wèn)成員的值。
?
轉(zhuǎn)載于:https://www.cnblogs.com/path130/p/11114877.html
總結(jié)
以上是生活随笔為你收集整理的结构体的传参理解成员的存储方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#中输出特殊符号
- 下一篇: GDI+有Bitmap类。