<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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ū)分?jǐn)?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] 進(jìn)行組成,構(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ù)進(jìn)行分析。
          本課程講解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
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99久久免费精品 | 欧美精品黄片 | 天天干天天操955 | 精品久久7777777香港 | 丝袜足交91 |