最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深度剖析C語(yǔ)言結(jié)構(gòu)體

 更新時(shí)間:2018年12月19日 09:36:40   作者:Engineer-Bruce_Yang  
今天小編就為大家分享一篇關(guān)于深度剖析C語(yǔ)言結(jié)構(gòu)體,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

做了挺久的開發(fā),對(duì)于C這種東西,我不敢說(shuō)自己已經(jīng)精通了,畢竟還是有許多細(xì)節(jié)在學(xué)習(xí)的過(guò)程中會(huì)遺忘,然后再通過(guò)實(shí)踐慢慢去一點(diǎn)點(diǎn)撿回來(lái)。所以只能算是熟練級(jí)別。

Linux內(nèi)核的實(shí)現(xiàn)博大精深,從offsetof的實(shí)現(xiàn)到后面的container_of,為什么通過(guò)結(jié)構(gòu)體的的成員就能獲得整個(gè)結(jié)構(gòu)體的指針呢?這就得益于offsetof宏的實(shí)現(xiàn)。關(guān)于這個(gè)宏,前面的博文也有講解,但不夠深入,今天的這個(gè)例子,足以對(duì)結(jié)構(gòu)體本身的原理大徹大悟,我們來(lái)看下面這個(gè)例子:

#include <stdio.h>
//32位系統(tǒng)上,結(jié)構(gòu)體在沒(méi)指定對(duì)齊的時(shí)候,默認(rèn)以四字節(jié)進(jìn)行對(duì)齊 
typedef struct __ST
{
 int id ;  //4
 char *name ; //4
 float math ; //4
}ST;
int main()
{
 ST st ;
 //獲取結(jié)構(gòu)體的第一個(gè)元素的首地址 
 int *ptr_0 = (int *)(&st);
 printf("st:  %p  ptr:  %p \n",&st,ptr_0);
 //對(duì)結(jié)構(gòu)體第一個(gè)元素賦值 
 *ptr_0 = 100 ;
 printf("*ptr_0 = %d\n",*ptr_0);
 //獲取結(jié)構(gòu)體的第二個(gè)元素的首地址,因?yàn)榈诙€(gè)元素是一級(jí)指針,所以需要用一個(gè)二級(jí)指針來(lái)接 
 char **ptr_1 = (char **)((int)&st+4) ;
 printf("ptr_1:%p\n",ptr_1);
 //對(duì)結(jié)構(gòu)體的第二個(gè)元素賦值 
 *ptr_1 = "hello world";
 printf("ptr_1:%s\n",*ptr_1);
 //獲取結(jié)構(gòu)體的第三個(gè)元素的首地址,根據(jù)對(duì)齊原則偏移算出第三個(gè)元素的地址 
 float *ptr_2 = (float *)((int)&st+8) ;
 printf("ptr_2:%p \n",ptr_2);
 //對(duì)結(jié)構(gòu)體的第三個(gè)元素進(jìn)行賦值 
 *ptr_2 = 96.78 ;
 printf("ptr_2:%.2f \n",*ptr_2);
 //輸出結(jié)構(gòu)體中所有成員的值 
 printf("st.id = %d  st.name = %s  st.math = %.2f\n",st.id,st.name,st.math);
  return 0;
}

這里的根據(jù)對(duì)齊原則算出來(lái)的偏移量其實(shí)其實(shí)不就是offsetof宏的原理嗎?

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

往后繼續(xù)看待鏈表,函數(shù)指針,等等與結(jié)構(gòu)體有關(guān)的概念,瞬間覺(jué)得一幕了然,徹底打通了這條曾經(jīng)學(xué)習(xí)的阻塞道路。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 快速學(xué)習(xí)六大排序算法

    快速學(xué)習(xí)六大排序算法

    這篇文章主要介紹了六大排序算法-插入排序、希爾排序、選擇排序、冒泡排序、堆排序、快速排序,需要學(xué)習(xí)的小伙伴可以參考這篇文章
    2021-08-08
  • C++如何有效地利用命名空間

    C++如何有效地利用命名空間

    談到C++編程中的模塊化和組織性時(shí),命名空間(Namespace)是一個(gè)重要的概念,所以本文主要來(lái)和大家聊聊C++命名空間的概念、用法以及如何有效地利用它來(lái)管理代碼,有需要的可以參考下
    2023-09-09
  • C++進(jìn)化后的const變量實(shí)例探究

    C++進(jìn)化后的const變量實(shí)例探究

    這篇文章主要為大家介紹了C++進(jìn)化后的const變量實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 基于Qt制作一個(gè)定時(shí)關(guān)機(jī)的小程序

    基于Qt制作一個(gè)定時(shí)關(guān)機(jī)的小程序

    這篇文章主要為大家詳細(xì)介紹了如何基于Qt制作一個(gè)有趣的定時(shí)關(guān)機(jī)的小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 如何通過(guò)C++在Bing搜索引擎上進(jìn)行命令行搜索

    如何通過(guò)C++在Bing搜索引擎上進(jìn)行命令行搜索

    這篇文章主要介紹了通過(guò)C++在Bing搜索引擎上進(jìn)行命令行搜索,在這篇文章中,我們將介紹一個(gè)簡(jiǎn)單的C++程序,允許用戶通過(guò)命令行輸入搜索詞,在Bing搜索引擎上執(zhí)行搜索,并在默認(rèn)瀏覽器中顯示搜索結(jié)果,需要的朋友可以參考下
    2023-12-12
  • C語(yǔ)言掃雷游戲的實(shí)現(xiàn)代碼

    C語(yǔ)言掃雷游戲的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言掃雷游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 解析C++中std::ref的使用

    解析C++中std::ref的使用

    這篇文章主要介紹了解析C++中std::ref的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單員工工資管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單員工工資管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關(guān)于VS+QT5應(yīng)用程序換圖標(biāo)的解決方案

    關(guān)于VS+QT5應(yīng)用程序換圖標(biāo)的解決方案

    這篇文章主要介紹了VS+QT5應(yīng)用程序換圖標(biāo)的處理方案,本文給大家提供了兩種解決方案供大家參考,每種方法給大家講解的都非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • C++調(diào)用C#的DLL實(shí)現(xiàn)方法

    C++調(diào)用C#的DLL實(shí)現(xiàn)方法

    這篇文章主要介紹了C++調(diào)用C#的DLL實(shí)現(xiàn)方法,很有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

西城区| 获嘉县| 修武县| 洛川县| 铁岭市| 康平县| 遂宁市| 昂仁县| 玉环县| 平昌县| 高阳县| 定襄县| 鱼台县| 保山市| 屏东县| 天祝| 高尔夫| 古田县| 弥勒县| 新化县| 舒兰市| 永仁县| 嫩江县| 柯坪县| 阿拉尔市| 云浮市| 永德县| 南靖县| 台中县| 塘沽区| 乌鲁木齐市| 三门峡市| 溧阳市| 平罗县| 岑溪市| 横山县| 峨山| 西安市| 苍梧县| 张北县| 新闻|