網(wǎng)站首頁 編程語言 正文
主要內(nèi)容
- 結(jié)構(gòu)體的使用 - 定義,賦值,結(jié)構(gòu)體指針
- 結(jié)構(gòu)體作為函數(shù)參數(shù)的使用
- 指針的使用
代碼內(nèi)容重點
1.結(jié)構(gòu)體的使用 - 定義,賦值,結(jié)構(gòu)體指針
2.結(jié)構(gòu)體作為函數(shù)參數(shù)的使用 - 最好使用結(jié)構(gòu)體指針作為參數(shù),而不是結(jié)構(gòu)體
因為當傳遞的結(jié)構(gòu)體作為參數(shù),數(shù)據(jù)量較大時,會占用較大的時間與空間,效率很低
使用結(jié)構(gòu)體指針作為函數(shù)參數(shù),比用結(jié)構(gòu)體本身作參數(shù)效率高很多,當只是讀取而不希望修改結(jié)構(gòu)體值時,可以添加const防止改變結(jié)構(gòu)體成員值
(STAFF_T const *p)
3.指針的使用 - 指針的定義,初始化,申請內(nèi)存空間(malloc),釋放(free)
指針在32位系統(tǒng)占用4Byte,在64位系統(tǒng)占用8Byte
注意:
使用malloc申請空間的指針,當不使用后需要手動釋放,避免占用內(nèi)存,并最好重新賦值為NULL,例p = NULL;
malloc后記得判斷是否成功
指針的定義和初始化
int* p;
int i;
p = &i;
或者初始化為NULL
int* p = NULL;
C語言代碼例子
這C代碼在VSCode和GDB online上成功運行調(diào)試
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl, C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog. Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <stdio.h> #include <malloc.h> #include <string.h> typedef struct Staff_t{ char* name; char sex; short age; float salary; char* date; } STAFF_T; void print_msg(STAFF_T const *p); // 結(jié)構(gòu)體指針作為函數(shù)參數(shù)的使用例子 int main() { int size; //STAFF_T sta; // 定義一個結(jié)構(gòu)體 //staff = &sta; // 另外一種結(jié)構(gòu)體初始化 STAFF_T* staff = NULL; // 定義一個結(jié)構(gòu)體指針,并初始化為NULL; // 為結(jié)構(gòu)體申請內(nèi)存空間,需要強制類型轉(zhuǎn)換(這里為結(jié)構(gòu)體指針類型),注意malloc成功返回字節(jié)數(shù),失敗返回NULL staff = (STAFF_T*)malloc(sizeof(STAFF_T)); // 判斷是否成功申請空間,只有申請成功才能使用,這一步很重要,許多人都容易忘記 if (staff == NULL) { printf("malloc(STAFF_T) ERROR\n"); return -1; } // 這里幾行調(diào)試用,打印出在32/64位系統(tǒng)中一些數(shù)據(jù)類型所占用的內(nèi)存空間大小不同 size = sizeof(STAFF_T); printf("STAFF_T size = %d\n",size); printf("SIZEOF:\n char*:%lu, char:%lu,short:%lu,float:%lu \n",sizeof(char*),sizeof(char),sizeof(short),sizeof(float)); staff->name = (char*)malloc(20*sizeof(char)); // 在C語言中,staff->name以下的兩種賦值方式都可以 staff->name = "duruofei";//strcpy(staff->name, "duruofei"); staff->sex = 'M'; staff->age = 29; staff->salary = 15000; staff->date = (char*)malloc(20*sizeof(char)); strcpy(staff->date,"2021-12-09");//strcpy(staff->date, "2021-12-09"); // 傳遞結(jié)構(gòu)體指針 print_msg(staff); // 參數(shù)為指針常量,因為這里只是讀取staff的值,而不希望修改staff的內(nèi)容 // 最后釋放指針,并賦值為NULL。因為指針free后指針所指向的內(nèi)存地址可以被其他變量使用,但指針本身還是指向原來地址,還可以使用,防止野指針 free(staff); staff = NULL; printf("Hello World\n"); return 0; } /** * function: print_msg * input: STAFF_T const * * ouput: none * descreption: print massage */ void print_msg(STAFF_T const *p) { // 參數(shù)為指針常量,因為這里只是讀取p的值,而不希望修改p的內(nèi)容 if (p == NULL) { printf("print_msg: p is NULL\n"); } printf("Name:%s, Sex:%c, Age:%d, Salary:%0.2f, Date:%s\n",\ p->name, p->sex, p->age, p->salary, p->date); }
原文鏈接:https://www.cnblogs.com/duruofei/p/15670942.html
相關(guān)推薦
- 2024-04-02 linux網(wǎng)絡(luò)查看配置與docker網(wǎng)絡(luò)刪除
- 2022-10-04 解決Pandas生成Excel時的sheet問題的方法總結(jié)_python
- 2022-10-23 Android?Handler源碼深入探究_Android
- 2022-09-27 詳解Django中CSRF和CORS的區(qū)別_python
- 2022-03-23 C++控制權(quán)限關(guān)鍵字protected_C 語言
- 2022-05-20 Shell編寫格式和執(zhí)行方式
- 2022-10-23 Kubernetes?k8s?configmap?容器技術(shù)解析_云其它
- 2022-06-13 ASP.NET?Core?MVC中的模型(Model)_基礎(chǔ)應用
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支