日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C 语言】结构体 ( 结构体偏移量计算 | 代码示例 )

發布時間:2025/6/17 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C 语言】结构体 ( 结构体偏移量计算 | 代码示例 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、結構體成員偏移量
  • 二、完整代碼示例





一、結構體成員偏移量



獲取 Student 結構體中 age 成員偏移量 有 222 種寫法 ;

  • 結構體樣式 :
typedef struct Student {char name[5]; // 0 ~ 4 字節int age; // 5 ~ 8 字節char *address; // 9 ~ 12 字節 }Student;
  • 將 0 內存空間 , 按照 Student 結構體內存類型 進行解析 , 可以求出結構體某個 成員 相對于 0 的偏移量 ;
int offset = (int)&(((Student *)0)->age)
  • 先獲取 結構體 成員 , 然后再取該成員的地址 ;
Student student = NULL; int offset = (int)&(student->age);

上述兩種獲取 Student 結構體中 age 成員偏移量的方法是等效的 ;


結構體 成員的 偏移量 是可以直接 計算獲取的 , 不管有沒有實際的 結構體變量 ;


結構體變量 如果聲明完成 , 那么結構體中的 成員 的內存 , 就已經分配好了 ;

如果知道了 結構體成員 的內存地址 , 可以根據該 結構體成員 的偏移量 , 計算出該結構體的 首地址 ;





二、完整代碼示例



完整代碼示例 :

#include <stdio.h> #include <stdlib.h> #include <string.h>/*** @brief The Student struct* 定義 結構體 數據類型 , 同時為該結構體類型聲明 別名* 可以直接使用 別名 結構體變量名 聲明結構體類型變量* 不需要在前面添加 struct 關鍵字*/ typedef struct Student {// 聲明變量時 , 會自動分配這 5 字節內存// 賦值時 , 可以直接使用 = 賦值字符串char name[5]; // 0 ~ 4 字節int age; // 5 ~ 8 字節// 聲明變量時 , 只會為 4 字節指針分配內存// 具體的 字符串內存 需要額外使用 malloc 申請內存// 賦值時 , 必須使用 strcpy 函數 , 向堆內存賦值char *address; // 9 ~ 12 字節 }Student;/*** @brief 主函數入口* @return*/ int main() {// 聲明結構體變量Student s1;// 聲明結構體指針Student *p = NULL;// 對指針進行算術運算時合法的p = p - 1;p = p + 10;// 給指針 p 設置合法地址p = NULL;// 獲取 Student 結構體 age 成員偏移量int age_offset = (int)&(p->age);// 獲取 Student 結構體 address 成員偏移量int address_offset = (int)&(((Student *)0)->address);printf("age_offset = %d, address_offset = %d\n", age_offset, address_offset);// 命令行不要退出system("pause");return 0; }

執行結果 :

age_offset = 8, address_offset = 12 請按任意鍵繼續. . .

總結

以上是生活随笔為你收集整理的【C 语言】结构体 ( 结构体偏移量计算 | 代码示例 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。