1. 程式人生 > >二級指標三種記憶體模型強化訓練

二級指標三種記憶體模型強化訓練

#define _CRT_SECURRE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

/*功能:把myp1,myp2指向的資料拷貝到myp3,並且排序*/
int sort(char**myp1,int num1,char(*myp2)[30],int num2,char***myp3,int *num3)
{
    char** p3 =NULL;
    int i,j,tmplen,n;
    char*tmp;
    p3 = (char**)malloc((num1+num2)*sizeof(char*));
    if (p3 == NULL)
    {
        return -1;
    }
    for (i =0;i<num1;i++)
    {
        tmplen = strlen(myp1[i])+1;
        p3[i] = (char*)malloc(tmplen*sizeof(char));
        if (p3[i]==NULL)
        {
            return -2;
        }
        strcpy(p3[i],myp1[i]);
    }

    
    for (j = 0;j<num2;j++)
    {
        //printf("%d\n",i+j);
        tmplen = strlen(myp2[j])+1;
        p3[i+j] = (char*)malloc(tmplen*sizeof(char));
        strcpy(p3[i+j],myp2[j]);
        
    }

    //排序
    tmplen = num1+num2;
    
    for (i = 0;i< tmplen;i++)
    {
        for (j = i+1;j<tmplen;j++)
        {
            if (strcmp(p3[i],p3[j])>0)
            {
                tmp = p3[i];//交換指標 改變指標指向
                p3[i] = p3[j];
                p3[j] = tmp;
            }
        }
    }
    *myp3 = p3;//間接賦值是指標存在的最大意義 
    *num3 = tmplen;//間接賦值是指標存在的最大意義
    return 0;
}
void printResult(char**p,int len)
{
    int i;
    for (i=0;i<len;i++)
    {
        printf("%s\n",p[i]);
    }
}
//釋放二級指標記憶體空間
void freeSource(char **p,int len)
{
    int i = 0;
    if (p==NULL)
    {
        return;
    }
    for ( i = 0;i<len;i++)
    {
        free(p[i]);
    }
    free(p);
}
//釋放二級指標記憶體空間
void freeSource2(char ***p,int len)
{
    int i = 0;
    char **tmp = NULL;
    tmp = *p;

    if (tmp==NULL)
    {
        return;
    }
    for ( i = 0;i<len;i++)
    {
        free(tmp[i]);
    }
    free(tmp);
    *p = NULL;
}
int main()
{
    /*p1,buf2主調函式分配記憶體*/
    char*p1[]= {"bbbbbb","aaaaaaa","ccccccc"};
    char buf2[10][30]={"333333","111111","222222"};
    /*p3被調函式分配記憶體,通過函式引數返回*/
    char**p3 = NULL;
    int len1,len2,len3,ret = 0,i;

    len1 = sizeof(p1)/sizeof(*p1);
    //printf("len1:%d\n",len1);
    len2 = 3;
    //printf("sizeof(buf2):%d\n",sizeof(*buf2));

    ret = sort(p1,len1,buf2,len2,&p3,&len3);
    if (ret!=0)
    {
        printf("func sort() err:%d\n",ret);
    }
    //printf("hello\n");
    printResult(p3,len3);
    freeSource2(&p3,len3);

    system("pause");
    return;
}


相關推薦

二級指標記憶體模型強化訓練

#define _CRT_SECURRE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include <string.h> /*功能:把myp1,myp2指向的資料拷貝到myp3,

C小程式—二級指標記憶體模型

#include "stdio.h"#include "string.h"#include "stdlib.h"int printAarray03(char **  pArray, int num){int i = 0;if (pArray == NULL){return -

二級指標做輸入的記憶體模型(學習筆記與記錄)

一:二級指標做輸入的第一種記憶體模型#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> //void prin

LINUX環境並發服務器的實現模型

服務 sset 成了 nec 使用 ndt 系統調用 accept listen 服務器設計技術有很多,按使用的協議來分有TCP服務器和UDP服務器。按處理方式來分有循環服務器和並發服務器。 1 循環服務器與並發服務器模型 在網絡程序裏面,一般來說都是許多客戶對應一個服務

談IO中的阻塞和非阻塞,同步和非同步及IO模型

什麼是同步和非同步?        燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麼發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科技的發展,現在市面上的水壺都有了提醒功能,當我們把水壺插電

談IO中的阻塞和非阻塞,同步和異步及IO模型

狀態 阻塞io 舉例 最大的 data- str 被調用 當我 返回 什麽是同步和異步? 燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麽發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科

C++學習筆記(記憶體模型、名稱空間、物件和類

    1、標頭檔案中通常包含的內容:函式原型、使用#define和const定義的符號常量、結構宣告、類宣告、模板宣告、行內函數     2、同樣可以使用條件編譯     3、靜態持續變數:外部連結性、內部連結性、無連結性靜態持續變數:外部連結性、內部連結性、無連結性         外部連結性:在程式碼塊

OpenCL中記憶體建立image的效率對比

第一種:使用ION: cl_mem_ion_host_ptr ion_host_ptr1; ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_ION_HOST_PTR_QCOM; ion_host_ptr1.ext_host_ptr.host_cache

函式指標方法

//函式指標定義 //1 typedef int(fun_point1)(int, int); int get_sum(int a, int b) { return a + b; } typedef int(*fun_point2)(int, int); int main(void) { //

Django學習筆記():關係模型的例項

一對一:通過外來鍵+unique唯一約束實現 #一對一 def get_bankcard(request):     bankcard = BankCard.objects.all()     return render(request,'get_bankcard.html

NB樸素貝葉斯理論推導與常見模型

轉自:http://www.tuicool.com/articles/zEJzIbR 樸素貝葉斯(Naive Bayes)是一種簡單的分類演算法,它的經典應用案例為人所熟知:文字分類(如垃圾郵件過濾)。很多教材都從這些案例出發,本文就不重複這些內容了,而把重點放在理論推導(其實很淺顯,別被“理論”嚇到),三

《Linux網路程式設計》: 併發伺服器的實現模型

迴圈伺服器與併發伺服器模型 伺服器設計技術有很多,按使用的協議來分有 TCP 伺服器和 UDP 伺服器,按處理方式來分有迴圈伺服器和併發伺服器。 在網路程式裡面,一般來說都是許多客戶對應一個伺服器(多對一),為了處理客戶的請求,對服務端的程式就提出了特殊的要求。 目前最

[高併發Java ] Java記憶體模型和執行緒安全

網上很多資料在描述Java記憶體模型的時候,都會介紹有一個主存,然後每個工作執行緒有自己的工作記憶體。資料在主存中會有一份,在工作記憶體中也有一份。工作記憶體和主存之間會有各種原子操作去進行同步。 但是由於Java版本的不斷演變,記憶體模型也進行了改變。本文只講述Jav

資料庫資料模型

層次模型 層次模型是資料庫系統最早使用的一種模型,它的資料結構是一棵“有向樹”。根結點在最上端,層次最高,子結點在下,逐層排列。層次模型的特徵是: 有且只有一個根結點 其他結點有且僅有一個父結點

C++的陣列、結構體、指標複合型別知識點小總結

陣列、結構體、指標是C++的3種複合型別。陣列可以在一個數據物件中儲存多個不同型別的值,通過使用索引或下標,可以訪問陣列中的各個元素。結構體可以將多個不同型別的值儲存在同一個資料物件中,可以使用成員關

Java Nio中的記憶體對映緩衝區---MappedByteBuffer

點選有驚喜 開始有點跟不上實際思路了, 今天暫停吧。 作個記錄。 package com.ronsoft.books.nio.channels; import java.io.File; import java.io.RandomAccessFile; i

LINUX環境併發伺服器的實現模型

伺服器設計技術有很多,按使用的協議來分有TCP伺服器和UDP伺服器。按處理方式來分有迴圈伺服器和併發伺服器。 1  迴圈伺服器與併發伺服器模型 在網路程式裡面,一般來說都是許多客戶對應一個伺服器,為了處理客戶的請求,對服務端的程式就提出了特殊的要求。 目前最常用的伺服器模型

CSS佈局模型

在網頁中,元素有三種佈局模型:1、流動模型(Flow) 預設的2、浮動模型 (Float)3、層模型(Layer)1、流動模型(Flow) 流動(Flow)模型是預設的網頁佈局模式。也就是說網頁在預設狀態下的 HTML 網頁元素都是根據流動模型來分佈網頁內容的。流動佈局模型具

實現高併發伺服器簡化模型 執行緒 程序 IO複用

知識點:UNIX網路程式設計第四章, 第五章,第六章 多程序模型: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<arpa/inet.h>

Java記憶體分配策略:靜態的.棧式的和堆式的區別

我的想法是(應該說代表TIJ的觀點),如果沒有Garbage Collector(GC),上面的說法就是成立的.堆不象棧是連續的空間,沒有辦法指望堆本身的記憶體分配能夠象堆疊一樣擁有傳送帶般的速度,因為,誰會為你整理龐大的堆空間,讓你幾乎沒有延遲的從堆中獲取新的空間呢?這個時候,GC站出來解決問題.我們都知道