中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言怎么寫類

發布時間:2023-04-25 16:20:26 來源:億速云 閱讀:103 作者:iii 欄目:開發技術

這篇文章主要講解了“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語言怎么寫類這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

睢宁县| 哈密市| 安龙县| 闽侯县| 渭南市| 新巴尔虎右旗| 那曲县| 长治县| 沂源县| 禹城市| 民县| 屯留县| 华宁县| 崇阳县| 伊金霍洛旗| 称多县| 双鸭山市| 榕江县| 手游| 高碑店市| 弋阳县| 色达县| 轮台县| 朝阳县| 郎溪县| 鲁山县| 宜宾市| 渝北区| 团风县| 于都县| 双城市| 金乡县| 宽城| 雅安市| 浦东新区| 鸡东县| 裕民县| 湖北省| 夏河县| 固始县| 津南区|