【C 语言】结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )
生活随笔
收集整理的這篇文章主要介紹了
【C 语言】结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、指針運算 與 指針內存操作
- 二、結構體偏移量計算
一、指針運算 與 指針內存操作
指針變量算術運算 ( 指針可以是任意值 ) : 指針 是一個變量 , 如果對指針進行 算術 / 邏輯 等運算 , 其效果等同于 對 int 整型變量 進行 算術運算 , 編譯運行 并不會報錯 ;
char *p = NULL;// 下面的操作 編譯 運行 都可以通過 p + 1; p - 1; p * 20;指針進行內存操作 ( 指針必須合法 ) : 但是注意 , 如果要 對 指針 進行內存操作 , 如使用 * 獲取指針指向的數據 , 或者使用 memset 修改指針指向的數據 , 或者 free 釋放指針 , 要操作的 指針變量 , 必須是 合法的指針 ;
char *p = NULL;// 下面的操作 涉及使用指針進行內存操作 , 編譯通過 , 運行時報錯 *p; free(p);二、結構體偏移量計算
定義結構體 :
/*** @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;求上述 Student 結構體的 age 成員的偏移量 ;
將 0 地址 , 按照 Student 結構體 內存 形式進行解釋 , 即將 0 地址指針 強轉為 Student * 類型 ;
(Student *)0然后取上述 Student * 指針類型的 age 成員 ;
((Student *)0)->age獲取上述 age 成員的地址 ;
&(((Student *)0)->age)將 age 成員的地址轉為 int 類型 ;
(int)&(((Student *)0)->age)上述獲取的就是 Student 結構體中 , age 成員的偏移量 ;
總結
以上是生活随笔為你收集整理的【C 语言】结构体 ( 指针运算与指针内存操作 | 结构体成员偏移量计算 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】结构体 ( 结构体浅拷贝 )
- 下一篇: 【C 语言】结构体 ( 结构体偏移量计算