1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        C語言中的數(shù)組指針和指針數(shù)組的概念和應(yīng)用

        共 2424字,需瀏覽 5分鐘

         ·

        2022-12-30 18:12

        點擊關(guān)注不迷路

        原創(chuàng)作者:三玹

        轉(zhuǎn)載請保留相關(guān)信息







        俗話說得好,C語言的指針是初學(xué)者的終點,也是高級Cer的起點。

        在步入指針廣袤的海洋中,會碰到各類形形色色的指針。其中,數(shù)組指針和指針數(shù)組是是一開始容易混淆的兩個概念。

        區(qū)分數(shù)組指針和指針數(shù)組

        雖然這兩個東西看著像是孿生兄弟一樣,但它們的概念和工作方式是截然不同的。尤其放在代碼中,有時候也分不清誰是誰。

        int (*arr)[5];int *arr[5];
        想要區(qū)分哪個是數(shù)組指針,哪個是指針數(shù)組,最主要的就是看它聲明時的符號。

        在編程語言中,每個符號都具備相應(yīng)的優(yōu)先級。就跟我們學(xué)數(shù)學(xué),先乘除后加減一個道理。

        而在上面這兩個聲明中,()[] 的優(yōu)先級算是最高的,解引用運算符 * 的優(yōu)先級就要次于二者。

        由此代入到聲明,第一個式子中先是定義了一個指針 *arr,指針變量 arr 指向一個長度為 5 的匿名數(shù)組,數(shù)組中存儲的是 5 個 int 類型的數(shù)據(jù)。所以第一個聲明的是一個數(shù)組指針。

        第二個聲明中,[] 的優(yōu)先級最高,因此變量名先和 [5] 進行組成,構(gòu)成了一個長度為 5 的 arr 數(shù)組。

        每個數(shù)組中的所有元素都必須要有統(tǒng)一的類型,而此時的類型就是 int* 整型指針類型。即說明當(dāng)前的 arr 數(shù)組中可以存儲 5 個整數(shù)指針類型的值,所以第二個聲明的是一個指針數(shù)組

        這么說或許有點干,也有點繞,下面就將這兩個拆開看一看。

        數(shù)組指針

        數(shù)組指針,它首先是一個指針,是指向數(shù)組的指針類型。允許用指針的方式,來訪問數(shù)組中的元素。

        來看個例子,現(xiàn)在我們初始化了一個整形數(shù)組arr,里面包含了 5 個元素:

        int arr[5] = {1, 2, 3, 4, 5};

        而后,我們再聲明一個ptr的指針,用來指向這個數(shù)組。

        int *ptr = arr;

        當(dāng)我們將數(shù)組變量賦值給指針變量,就是將數(shù)組的第一個元素 arr[0] 所在的內(nèi)存地址賦值給了指針 ptr。

        因此,我們就可以直接使用這個指針來訪問數(shù)組中的元素。

        printf("%d\n", *ptr); // 輸出 1ptr++; // 指向下一個元素printf("%d\n", *ptr); // 輸出 2

        指針數(shù)組

        指針數(shù)組則是不同于數(shù)組指針的另一個概念,它首先是一個數(shù)組,然后數(shù)組中的每個元素都是一個指針。

        來看一個例子,假設(shè)我們有兩個字符串:

        char *str1 = "Hello";char *str2 = "World";

        此時,我們可以使用指針數(shù)組來存儲這兩個字符串:

        char *str_arr[2] = {str1, str2};

        這樣一來,我們就可以使用下標(biāo)來訪問這個數(shù)組中的每個元素,例如:

        printf("%s %s\n", str_arr[0], str_arr[1]); // Hello World

        需要注意的是,這里使用的是下標(biāo)來訪問數(shù)組中的元素,而不是用解引用運算符。

        應(yīng)用場景

        在C語言當(dāng)中,數(shù)組變量名本身就是一個指向數(shù)組第一個元素的指針。因此,我們就可以直接將數(shù)組傳遞給函數(shù)來訪問數(shù)組中的元素,例如:

        void print_array(int *arr, int size) {  for(int i = 0; i < size; i++) {    printf("%d ", arr[i]);  }  printf("\n");}
        int main() { intarr[5] = {1, 2, 3, 4, 5}; print_array(arr, 5); // 輸出 "1 2 3 4 5" return0;}

        在這個函數(shù)中,我們使用了數(shù)組指針來訪問數(shù)組中的元素。

        指針數(shù)組,我們可以用來存儲動態(tài)分配的內(nèi)存,例如:

        #define MAX_STRINGS 10char *strings[MAX_STRINGS];
        int main() { for(int i = 0; i < MAX_STRINGS; i++) { strings[i] = malloc(100); } // 在這里使用 strings 數(shù)組 for(int i = 0; i < MAX_STRINGS; i++) { free(strings[i]); } return 0;}

        在上面的代碼中,我們使用了指針數(shù)組來存儲動態(tài)分配的內(nèi)存塊。我們在用完這些內(nèi)存后,需要使用 free 函數(shù)及時釋放。

        總結(jié)

        在C語言中,數(shù)組指針和指針數(shù)組是兩種很常見的概念。它們都是用來存儲和訪問數(shù)據(jù),但兩者的工作方式是不同的。

        • 數(shù)組指針是指向數(shù)組的指針類型,可以用解引用運算符來訪問數(shù)組中的元素;

        • 指針數(shù)組是存儲指針的數(shù)組,可以通過下標(biāo)來訪問指針數(shù)組中的元素。

        它們分別都有自己相應(yīng)的應(yīng)用場景:

        • 數(shù)組指針,常用于函數(shù)參數(shù)中,方便在函數(shù)中訪問數(shù)組中的元素;

        • 指針數(shù)組,常用于動態(tài)分配內(nèi)存,在使用完之后要及時釋放內(nèi)存。

        學(xué)習(xí)數(shù)組指針和指針數(shù)組的時候,最重要的是要熟悉它們的工作方式,以及明白它們在 C 語言當(dāng)中的應(yīng)用場景。

        新上課程



        課程:MySQL數(shù)據(jù)庫入門實戰(zhàn)- Python版
        課程介紹:MySQL是當(dāng)前互聯(lián)網(wǎng)非常重要的數(shù)據(jù)存儲技術(shù),大量的用戶信息、訂單信息、客戶信息都存儲在MySQL,掌握MySQL甚至成為衡量一名程序員的重要技術(shù),而非技術(shù)的運營、產(chǎn)品也經(jīng)常需要使用SQL去查詢數(shù)據(jù)進行分析。
        本課程講解MYSQL的使用技術(shù),結(jié)合Python語言的應(yīng)用,也實現(xiàn)了自動化的操作和處理。
        講師:裴帥帥
        講師介紹:前百度資深大數(shù)據(jù)工程師,現(xiàn)某一線互聯(lián)網(wǎng)推薦系統(tǒng)架構(gòu)師,8年大數(shù)據(jù)、機器學(xué)習(xí)研發(fā)經(jīng)驗,常年使用和實戰(zhàn)Python/Java雙語言。
        課程優(yōu)惠:原價198元,目前上線限時 5 折優(yōu)惠,普通用戶只需要99即可獲得該門課程永久權(quán)限。
        VIP 用戶無需付費,在線即可觀看該課程。
        課程鏈接:長按掃碼 ↓ 立即前往課程頁面



        點擊
        閱讀原文
        ,立即前往課程頁面

        瀏覽 26
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            青青草国产偷拍 | 亚洲一区二区在线免费观看 | 女人张开大腿让男人捅 | 在熟睡夫面前侵犯我在线播放 | bdsm折磨bdsm乳铐 | 一弯下腰白球球就蹦出来了 | 免费做爱小视频 | 男频后宫h黄文一男多女 | 久久香蕉久久 | 美女爱爱视频 |