91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

三級指針的應用場景

發布時間:2020-06-28 07:17:53 來源:網絡 閱讀:2359 作者:匯天下豪杰 欄目:編程語言

1、問題:將指針數組和二維數組中的字符串存放到第三個指針所指向的內存空間中,并進行排序(默認升序)輸出,必須通過函數來完成。

(1)、代碼如下:
#include<stdio.h>
#include<string.h>
#include<malloc.h>

void destorySpace_2(char ***p3, int len3);
void destorySpace_1(char **p3, int len3);
int sort(char **myp1, int len1, char (*myp2)[30], int len2, char ***myp3, int *len3);

int sort(char **myp1, int len1, char (*myp2)[30], int len2, char ***myp3, int *len3){
    int len;
    int i;
    int j;
    char **p3 = NULL;
    int temLen;
    char *tmp1;

    len = len1 + len2;
    p3 = (char **)malloc(sizeof(char *) * len);

    //先將第一個指針數組的內容拷貝到p3所指向的空間中
    for(i = 0; i < len1; i++){
        temLen = strlen(myp1[i])+1;
        p3[i] = (char *)malloc(sizeof(char) * temLen);
        strcpy(p3[i], myp1[i]);
    }
    //先將第二個二維數組的內容拷貝到p3所指向的空間中
    for(j = 0; j < len2; j++, i++){
        temLen = strlen(myp2[j])+1;
        p3[i] = (char *)malloc(sizeof(char) * temLen);
        strcpy(p3[i], myp2[j]);
    }

    //最后對p3所指向的空間的字符串在進行排序;
    for(i = 0; i < len; i++){
        for(j = i+1; j < len; j++){
            if(strcmp(p3[i], p3[j]) > 0){
                tmp1 = p3[i];
                p3[i] = p3[j];
                p3[j] = tmp1;
            }
        }
    }

    *myp3 = p3;
    *len3 = len;

    return 0;
}   
//銷毀p3所指向空間的第一種方法,自己必須在調用下面對p3 = NULL;
void destorySpace_1(char **p3, int len3){
    int i;

    if(p3 != NULL){
        for(i = 0; i < len3; i++){
            if(p3[i] != NULL){
                free(p3[i]);
            }
        }
        free(p3);
    }
} 
//銷毀p3所指向空間的第二種方法
void destorySpace_2(char ***p3, int len3){
    int i;
    char **p;

    if(p3 == NULL){
        return;
    }
    p = *p3;
    if(p != NULL){
        for(i = 0; i < len3; i++){
            if(p[i] != NULL){
                free(p[i]);
            }
        }

        free(p);
        *p3 = NULL;
    }
}
int main(void){
    char *p1[] = {"aaaaa", "bbbbb", "ccccc", "eeeeeee"};
    char buf1[][30] = {"fffff", "kkkkkkk"};
    char **p3;
    int len1;
    int len2;
    int len3;
    int ret;
    int i;

    len1 = sizeof(p1)/sizeof(p1[0]);
    len2 = sizeof(buf1)/sizeof(buf1[0]);

    ret = sort(p1, len1, buf1, len2, &p3, &len3);
    if(ret != 0){
        printf("sort() err\n");
        return ret;
    }

    for(i = 0; i < len3; i++){
        printf("%s\n", p3[i]);
    }
   //destorySpace_2(&p3, len3);
    destorySpace_1(p3, len3);
    p3 = NULL;

    return 0;
}

(2)、運行結果:

三級指針的應用場景

(3)、模型分析

  思想:因為要用函數完成,對二維數組和指針數組中的字符串先進行存放到p3所指向的空間中,就必須的使用三級指針來接收了,然后在對其所指向的空間進行排序!

  在進行空間的釋放時,要是在函數內部避免野指針問題,就必須的用三級指針來接收了!

  在進行空間的釋放時,要是用二級指針來接收的話,則自己必須在調用的下面對其進行賦空,避免野指針的出現,原因:2個指針空間的值沒有半毛錢的關系(它們之間僅僅是形參、實參的對應關系)!!!

拋出問題的代碼:

//函數調用
destorySpace(char **p3){
    ......
    p3 = NULL;
}
//主函數
int main(void){
    char **p3 = NULL;
    ...
    destorySpace(p3);
}

模型如下:
三級指針的應用場景



向AI問一下細節

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

AI

凤山县| 黎平县| 松原市| 庆元县| 高碑店市| 亳州市| 宁津县| 襄城县| 龙州县| 金乡县| 昭苏县| 合作市| 海晏县| 南漳县| 芜湖县| 陇西县| 沙坪坝区| 泰顺县| 凯里市| 朔州市| 镇巴县| 巢湖市| 靖边县| 应用必备| 洪雅县| 海原县| 虎林市| 西峡县| 广安市| 郁南县| 广水市| 射阳县| 巨野县| 天台县| 安吉县| 西乌珠穆沁旗| 什邡市| 宁远县| 高要市| 泗阳县| 巴里|