溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ios第十天

發(fā)布時(shí)間:2020-04-04 17:11:54 來源:網(wǎng)絡(luò) 閱讀:555 作者:191425207 欄目:移動(dòng)開發(fā)

/ 利用關(guān)鍵字 static 修飾的變量 叫做靜態(tài)變量 并且存儲(chǔ)在靜態(tài)區(qū)

// 特點(diǎn)如果你不給初值的話  默認(rèn) 0

// 特點(diǎn)只初始化一次

// main函數(shù) 上面  是全局靜態(tài)變量

//  main函數(shù) 里面  叫局部靜態(tài)變量  作用域是大括號(hào)內(nèi)

void function(){

    int a = 5;

    int b = 6;

    printf("%d,%d",a,b);

}


int main(int argc, const char * argv[]) {

    //  內(nèi)存劃分為5個(gè)區(qū)域

    //  棧區(qū) 堆區(qū) 靜態(tài)區(qū) 常量區(qū) 代碼區(qū)

    //  內(nèi)存地址 由高到低

    //  學(xué)習(xí)目標(biāo) 按順序記憶

#pragma mark  -- 代碼區(qū)


    // 電腦的存儲(chǔ) 都是以二進(jìn)制數(shù)據(jù)進(jìn)行存儲(chǔ)的

    // 咱們寫得代碼 會(huì)被系統(tǒng)轉(zhuǎn)化成二進(jìn)制數(shù)據(jù) 存儲(chǔ)代碼區(qū)

    

    

    

#pragma mark  -- 常量區(qū) 

    // 常量區(qū) 存儲(chǔ)的常量特點(diǎn)

    // h 更改成 w

//    char *str = "zhuang";

    // 常量 是程序運(yùn)行期間 不能改變量

//    str = "haha"; // 指針的賦值 就是重指向

//    char str[] = "zhuang";

//    str[1]='w';

    // 數(shù)組名字  地址 數(shù)組首元素的地址

    // 數(shù)組首元素的常量地址

    // 是把常量字符串  拷貝到棧區(qū)

    

    

    

#pragma mark  -- 靜態(tài)區(qū)

    

    // 靜態(tài)區(qū): 存儲(chǔ)兩種變量

    // 1. 靜態(tài)變量

    // 2. 全局變量

    // 3. 靜態(tài)區(qū)變量 保存周期:直到程序運(yùn)行結(jié)束 靜態(tài)變量才會(huì)被釋放(伴你到永生)


    

#pragma mark  -- 棧區(qū)

    

//    int num1 = 5;

//    int num2 = 10;

//    int num3 = 15;

//    printf("%p\n",&num1);

//    printf("%p\n",&num2);

//    printf("%p\n",&num3);

    

    // 棧區(qū)有多大?

    // 大概7M-8M

    

    

//    char str[8187 * 1024] = {0};

    // 出棧 入棧的規(guī)則

    // 先入棧的 后出棧  先入棧的  在棧低

    // 入棧  可以叫 壓棧

    // 出棧  的順序  從棧頂開始 出棧

//    int num1 =5;

//    int num2 = 10;

//    int num3 = 15;

//    function();

    // 之所以棧區(qū)容量不是特大  又不出現(xiàn)奔潰的現(xiàn)象 是因?yàn)?/span> 棧區(qū) 頻繁進(jìn)行 出棧 和入棧 只要一次性 不把棧空間堆滿  不會(huì)輕易出現(xiàn)崩潰

    // 定義變量的時(shí)候  切記 給初值 避免出現(xiàn)莫名其妙的問題

    

    

#pragma  mark  -- 堆區(qū)

    // 堆區(qū) 是程序員開辟空間 是程序員釋放空間

    // 手動(dòng)開辟空間 手動(dòng)釋放空間

    // 堆區(qū)空間 大概就是咱們內(nèi)存全部空間

    

    

    // 開辟空間函數(shù)

    // void * 表示無類型指針 可以轉(zhuǎn)換成任何類型的指針

    // void *malloc(<#size_t#>)

    // size 開辟空間大小 開辟多少字節(jié)空間

    // 給整型指針p 指向的位置  開辟了4個(gè)字節(jié)的 堆內(nèi)存空間

//    int *p = malloc(4);

//    *p = 10;

//    printf("%d \n",*p);

//    

    

    

//    char *str = malloc(8);

//    strcpy(str, "wang"); // 正確的

//    strcpy(str, "wangwangwang");// 錯(cuò)誤的, 開辟多少空間  就要用多少空間 不要超過開辟的空間

    

    

//    printf("%s",str);

//    int *p1 = malloc(4);

//    *p1 = 5;

//    short *p2 = malloc(4); //  開辟多少空間  最好你就用多少

//    *p2 = 10;

//    *(p2 + 1) = 15;

//    

    

    

    

    // 釋放空間函數(shù)

    // free(<#void *#>)

    // 1 .標(biāo)記刪除  不會(huì)抹去該空間存儲(chǔ)的數(shù)據(jù)  只會(huì)把這塊空間標(biāo)記為可用

    // 2. 把指針置為空

    // 開辟空間

//    int *p = malloc(4);

//    // 使用空間

//    *p = 10;

//    printf("%d\n",*p);

//    // 釋放空間

//    free(p);

//    p =NULL;


//    int *p = malloc(sizeof(int) * 5);

//    for (int i = 0; i < 5; i++) {

//        *p = i + 1;

//        p++;

//    }

//    //  指針地址發(fā)生變化  釋放了本不屬于你開辟的區(qū)域 這時(shí)候程序崩潰

//    

//    

//    // 修改  把指針移回去

//    for (int i = 0; i < 5; i++) {

//        p--;

//    }

//    free(p);

//    p = NULL;

//    

//**********************************************************************

//    char str[] ={"dj5s5f"};

//    // 計(jì)算出有多少個(gè)數(shù)字

//    int count = 0;

//    for (int i  = 0; i < strlen(str); i++) {

//        if (str[i] >= '0' && str[i] <= '9') {

//            count++;

//        }

//    }

//    char *strValue = malloc(count + 1);

//    int index = 0;

//    for (int i = 0; i < strlen(str); i++) {

//        if (str[i] >= '0' && str[i] <= '9' ) {

//            strValue[index] = str[i];

//            index++;

//        }

//    }

//    strValue[index] = '\0';

//    printf("%s",strValue);

//    free(strValue);

//    strValue = NULL;

//    

//*******************************************************************

 

    

//    char *words[3] = {0};

//    char str[] = {0};

//    for (int i = 0; i < 3; i++) {

//        printf("請(qǐng)輸入一個(gè)字符串");

//        scanf("%s",str);

//        printf("%lu",strlen(str));

//        words[i] = malloc(strlen(str) + 1);

//        // 保存字符串

//        strcpy(words[i], str);

//        

//    }

//    

//    

//    

//    for (int i = 0; i < 3; i++) {

//        printf("%s",words[i]);

//        free(words[i]);

//        words[i] = NULL;

//    }

//

// ************************************************************

    

    

    

    

    

    

    

    

    

    

    

    // 其他分配堆內(nèi)存函數(shù)

    // 在堆內(nèi)存當(dāng)中 開辟 n * size 個(gè)空間  并且把開辟的內(nèi)存空間清零

    // 因?yàn)橛幸粋€(gè)清零的過程  所有效率偏低

    // calloc(int n , size);

    

    

    

    // 重新分配函數(shù)

    // realloc(原來分配的地址, 新空間大小)

    // 情況1: 如果原來分配的地址  可以擴(kuò)充空間 那么就在原地址擴(kuò)充

    // 情況2: 如果原來分配的地址  不能擴(kuò)充了  那么系統(tǒng)會(huì)重新分配一個(gè)空間  并且把原來地址存儲(chǔ)的數(shù)據(jù)拷貝到新空間里 然后系統(tǒng)自動(dòng)釋放原地址的空間

//    

//    int *p_old = malloc(10);

//    int *p_new =realloc(p_old, 15);

//    printf("%p %p\n",p_old,p_new);

//    

//    

    

    

    

   // 內(nèi)存操作函數(shù)

   // 把開辟的空間  多少字節(jié)  重置成C

   // memset(開辟的空間的指針, int c, 字節(jié)數(shù))

   // 用途: 把開辟好的空間  清零

//    int *p = malloc(sizeof(int) * 4);

//    for (int i = 0; i < 4; i++) {

//        p[i]=i + 5;

//        

//    }

//    // 清零

//    memset(p, 0, sizeof(int) * 4);

//    for (int i = 0; i < 4; i++) {

//        printf("%d",p[i]);

//    }

    

    

    // 內(nèi)存拷貝函數(shù)

    // 從來源  拷貝 目的地  多個(gè)字節(jié)

    // memcmp(目的地, 來源, 字節(jié)數(shù))

    

    

    

    

    

    // 內(nèi)存比較函數(shù)

    // 兩個(gè)地址  按字節(jié)  進(jìn)行比較  返回第一個(gè)不同的差值

    // memcmp(指針1, 指針2, 字節(jié)數(shù))

    


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI