C語言如何寫類實現教程示例
引言
以前用C++BUILDER 寫類非常爽.
類把涉及數據相關的操作打包成一個類.
然後後期開發工程師可以繼承啊, 這樣提升瞭開發效率.
不過C語言註重的是執行效率, 類的繼承會導致內存的浪費,可能導致性能不佳!
最近繼續完善我那個小C,大傢還記得小C妹子嗎?
操空MYSQL的C程序
對她 就是操空MYSQL的C程序, 我叫她去幹刪除日志表的工作!
不過最近要對她增加適應工作環境,有的環境需要CA證書,比如說RDS,亞馬遜,以及MYSQL自己的證書.
所以對原本的參數需要增加3項. 另外的就是原本參數使用的是數組,無法動態根據實際參數大小來存儲.有時候浪費很多內存,有的時候數組不會存儲結尾字符'\0' 比如說參數 char is_ssl[3]; 如何是no則沒有問題,YES倒是有問題.丟失瞭結尾符號.在後面比較的時候就無法判斷瞭.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define KEYSIZE 15 typedef struct { union { struct { char* ip; char* user; char* port; char* passwd; char* schema; char* table_name; char* limit_rows; char* total_sql; char* del_sql; char* logfile; char* is_ssl; char* client_cert; char* client_key; char* ca_cert; char* is_debug; } ; char *pArr[KEYSIZE]; }; } Parameter; typedef struct { Parameter param; void (*init) (Parameter* param ); void (*free) (Parameter* param ); }TParameter; //--------------------------------------------------------------------------------------------------------------------- void init_Paramter(Parameter* param ) { for(int i=0;i<KEYSIZE; i++) { param->pArr[i]=NULL; } } //--------------------------------------------------------------------------------------------------------------------- void free_Parameter(Parameter* param ) { for (int i=0;i<KEYSIZE;i++) { free (param->pArr[i]); param->pArr[i]=NULL; } } int main() { TParameter ParamObj; ParamObj.init=init_Paramter; ParamObj.free=free_Parameter; ParamObj.init(&ParamObj.param); ParamObj.param.ip= calloc(sizeof(char),strlen("192.168.0.155")+1); strcpy(ParamObj.param.ip,"192.168.0.155"); printf("ParamObj.IP:%s\n",ParamObj.param.ip); printf("ParamObj.IP Length:%d\n",strlen(ParamObj.param.ip)); ParamObj.free(&ParamObj.param); return 0; }
定義個 聯合體+結構體 類型 Parameter
該類型 裡面有個聯合體 字符指針數組 ; 外加一個結構體參數;
數組的作用就是遍歷結構體裡面的指針, 從而可以初始化和釋放內存操作
然後我們再套個結構體類型. 把 Parameter 設置成瞭數據成員,
另外我們再定義兩個函數指針成員.
這樣我們的類就定義完成瞭.
接著我們在主函數裡面 定義類的 參數對象
TParameter ParamObj;
這裡是C 不像C++ 我們需要手工關聯 函數指針成員. 說白點就是給它賦值
關聯上具體函數地址.
ParamObj.init=init_Paramter;
ParamObj.free=free_Parameter;
接著我們通過函數來初始化我們的參數數據
ParamObj.init(&ParamObj.param);
然後就是我們正式的對數據成員動態分配堆內存
ParamObj.param.ip= calloc(sizeof(char),strlen("192.168.0.155")+1);
strcpy(ParamObj.param.ip,"192.168.0.155");
接下來就是 對數據成員的使用
printf("ParamObj.IP:%s\n",ParamObj.param.ip);
printf("ParamObj.IP Length:%d\n",strlen(ParamObj.param.ip));
最後我們釋放數據成員的內存
ParamObj.free(&ParamObj.param);
我們一般都定義為址傳給函數; 因為這樣非常快; 傳內存地址 也就是4-8字節
而傳值 就大於8字節;
strlen(ParamObj.param.ip) 就13個字節!
C語言菜單
C語言的野指針
VSCODE 從相戀到分手
以上就是C語言如何寫類實現教程示例的詳細內容,更多關於C語言如何寫類的資料請關註WalkonNet其它相關文章!