c語言結(jié)構(gòu)體與二級指針結(jié)合之簡單應(yīng)用

直接上代碼

/**
 *  定義 Teacher結(jié)構(gòu)體數(shù)據(jù)類型
 *  本質(zhì) 固定內(nèi)存塊大小的別名
 */
typedef struct Teacher{
    int   age;//4字節(jié)
    char  name[64];//64字節(jié)
    float weight;//4字節(jié)
}Teacher;

/**
 *  初始化Teacher
 *  @param tea Teacher指針變量地址
 *  @return 初始化結(jié)果
 */
int creatTeacher(Teacher **tea){
    Teacher *tmp = NULL;
    tmp = (Teacher *)malloc(sizeof(Teacher));//72字節(jié)
    if (tmp == NULL) {
        return -1;
    }
    *tea = tmp;
    return 0;
}
/**
 *  釋放Teacher
 *  @param tea Teacher指針變量地址
 *  @return 釋放結(jié)果
 */
int freeTeacher(Teacher **teaOne){
    Teacher **tmp = teaOne;
    if (tmp != NULL) {
        free(*teaOne);
    }
    //這里值得注意的是,釋放了內(nèi)存后還要對Teacher指針變量置NULL,防止出現(xiàn)野指針
    *tmp = NULL;
    if (*tmp == NULL) {
        return 0;
    }else {
        return -1;
    }
}

void safeFree(void **objPtr){
    if (objPtr != NULL && *objPtr != NULL) {
        free(*objPtr);
        *objPtr = NULL;
    }
}

int main(int argc, const char * argv[]) {
    Teacher *teaOne = NULL;
    int result = creatTeacher(&teaOne);
    if (result == -1) {
        printf("func creatTeacher error:%d\n",result);
        return result;
    }else {
        char tName[64] = "wangweihu";
        teaOne->age = 26;
        teaOne->weight = 75;
        //給字符串?dāng)?shù)組賦值的兩種方法
        strcpy(teaOne->name,tName);
        printf("老師的名字:%s, 體重:%fkg, 年齡:%d歲\n",teaOne->name, teaOne->weight, teaOne->age);
        for (int i = 0; i<sizeof(tName); i++) {
            teaOne->name[i] = tName[i];
        }
        printf("老師的名字:%s, 體重:%fkg, 年齡:%d歲\n",teaOne->name, teaOne->weight, teaOne->age);
        int freeResult = freeTeacher(&teaOne);
        if (freeResult == -1) {
            printf("func freeTeacher error:%d\n",freeResult);
            return freeResult;
        }else {
            return freeResult;
        }
        return result;
    }
    return 0;
}

解讀:

1.結(jié)構(gòu)體的定義

//定義
struct A {
    int a;        // 占4個字節(jié)
    char b;     // 占1個字節(jié)
    short c;    // 占2個字節(jié)
}颇蜡;
//定義并初始化
struct B {
    int a;        // 占4個字節(jié)
    char b;     // 占1個字節(jié)
    short c;    // 占2個字節(jié)
}B_demo = {10, 'w', 5}价说;

2.結(jié)構(gòu)體的初始化
3.結(jié)構(gòu)體的釋放
這里主要是安全釋放,這里要做到對任何指針類型的試用风秤,參數(shù)有必要改成void指針的指針鳖目,否則的話會報類型不匹配的警告。

void safeFree(void **objPtr){ if (objPtr != NULL && *objPtr != NULL) { free(*objPtr); *objPtr = NULL; }}

4.結(jié)構(gòu)體實用用例
將指針傳遞給函數(shù)時缤弦,是值傳遞领迈,函數(shù)里面拿到的也僅僅是一個拷貝指針,不會修改原指針的碍沐。如果我們想修改原指針而不是指針的副本狸捅,就需要傳遞指針的指針。

int creatTeacher(Teacher **tea){
    Teacher *tmp = NULL;
    tmp = (Teacher *)malloc(sizeof(Teacher));//72字節(jié)
    if (tmp == NULL) {
        return -1;
    }
    *tea = tmp;
    return 0;
}

本例中傳遞的參數(shù)是結(jié)構(gòu)體指針的內(nèi)存地址累提,初始化完畢后尘喝,返回分配的指針;返回值是初始化結(jié)果刻恭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞧省,一起剝皮案震驚了整個濱河市扯夭,隨后出現(xiàn)的幾起案子鳍贾,更是在濱河造成了極大的恐慌鞍匾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骑科,死亡現(xiàn)場離奇詭異橡淑,居然都是意外死亡,警方通過查閱死者的電腦和手機咆爽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門梁棠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斗埂,你說我怎么就攤上這事符糊。” “怎么了呛凶?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵男娄,是天一觀的道長。 經(jīng)常有香客問我漾稀,道長模闲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任崭捍,我火速辦了婚禮尸折,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殷蛇。我一直安慰自己实夹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布粒梦。 她就那樣靜靜地躺著收擦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谍倦。 梳的紋絲不亂的頭發(fā)上塞赂,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音昼蛀,去河邊找鬼宴猾。 笑死,一個胖子當(dāng)著我的面吹牛叼旋,可吹牛的內(nèi)容都是我干的仇哆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼夫植,長吁一口氣:“原來是場噩夢啊……” “哼讹剔!你這毒婦竟也來了油讯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤延欠,失蹤者是張志新(化名)和其女友劉穎陌兑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體由捎,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡兔综,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狞玛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片软驰。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖心肪,靈堂內(nèi)的尸體忽然破棺而出锭亏,到底是詐尸還是另有隱情,我是刑警寧澤硬鞍,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布慧瘤,位于F島的核電站,受9級特大地震影響膳凝,放射性物質(zhì)發(fā)生泄漏碑隆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一蹬音、第九天 我趴在偏房一處隱蔽的房頂上張望上煤。 院中可真熱鬧,春花似錦著淆、人聲如沸劫狠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽独泞。三九已至,卻和暖如春苔埋,著一層夾襖步出監(jiān)牢的瞬間懦砂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工组橄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荞膘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓玉工,卻偏偏與公主長得像羽资,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子遵班,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容