最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中指針數(shù)組和數(shù)組指針的具體使用

 更新時間:2025年12月18日 10:05:45   作者:VekiSon  
指針數(shù)組和數(shù)組指針是C語言中高頻混淆的概念,它們在語法和用途上有顯著區(qū)別,指針數(shù)組中的每個元素都是指針,而數(shù)組指針指向一個完整的數(shù)組,下面就來詳細的介紹一下

指針數(shù)組和數(shù)組指針是C語言中高頻混淆的概念,核心區(qū)別在于本質(zhì)不同

  • 指針數(shù)組是“數(shù)組”(數(shù)組的每個元素都是指針),主要用來儲存數(shù)據(jù);
  • 數(shù)組指針是“指針”(指針指向一個完整的數(shù)組),主要用來訪問數(shù)據(jù)

一、指針數(shù)組

一個普通數(shù)組,但其每個元素的類型是指針(可以指向 int、char、結(jié)構(gòu)體等任意類型)。

1.語法格式

數(shù)據(jù)類型 *數(shù)組名[數(shù)組長度];

int *p[5];   // 指針數(shù)組:數(shù)組p有5個元素,每個元素是int*類型的指針
char *str[3];// 指針數(shù)組:數(shù)組str有3個元素,每個元素是char*類型的指針(常用于字符串)

關(guān)鍵:[ ] 優(yōu)先級高于 *,所以 p 先與 [ ] 結(jié)合,確定是數(shù)組,再由 * 確定數(shù)組元素是指針。

2.常見用法

存儲多個字符串(避免字符串?dāng)?shù)組的內(nèi)存浪費)、指向多個一維數(shù)組。

  • 存儲多個字符串

字符串常量的本質(zhì)是字符數(shù)組的首地址,用 char * 指針數(shù)組存儲這些地址,高效且靈活。

#include <stdio.h>

int main() {
    // 指針數(shù)組:每個元素指向一個字符串常量(首地址)
    char *fruit[] = {"apple", "banana", "cherry", "date"};
    int n = sizeof(fruit) / sizeof(fruit[0]); // 數(shù)組長度:4

    // 遍歷指針數(shù)組,打印每個字符串
    for (int i = 0; i < n; i++)
    {
        // fruit[i] 是指針,指向字符串首地址,%s 直接解析
        printf("fruit[%d]: %s\n", i, fruit[i]);
    }

    return 0;
}

輸出:

fruit[0]: apple

fruit[1]: banana

fruit[2]: cherry

fruit[3]: date

優(yōu)勢:字符串長度不同時,指針數(shù)組僅存儲地址(4 字節(jié) / 個),比 char fruit[4][20](固定 20 字節(jié) / 個)節(jié)省內(nèi)存。

  • 指向多個一維數(shù)組
#include <stdio.h>

int main() {
    int arr1[] = {1,2,3};
    int arr2[] = {4,5,6};
    int arr3[] = {7,8,9};

    // 指針數(shù)組:每個元素指向一個int型一維數(shù)組
    int *p_arr[] = {arr1, arr2, arr3}; 

    // 遍歷:通過指針數(shù)組訪問每個一維數(shù)組的元素
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            // p_arr[i] 是數(shù)組首地址,p_arr[i][j] 等價于 *(p_arr[i] + j)
            printf("%d ", p_arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

輸出:

1 2 3

4 5 6

7 8 9

二、數(shù)組指針

一個指針變量,專門指向一個完整的數(shù)組(而非數(shù)組的單個元素)。

  • 對一維數(shù)組的數(shù)組名
    • &:值不變,類型升級為數(shù)組指針,即第一行元素的指針。
    • * :地址值不變,類型降級,指向數(shù)組中第一個元素的指針。

一維數(shù)組的數(shù)組名是指向第一個元素的指針。數(shù)組名+1,步進值是 sizeof(基類型) 的大小。

二維數(shù)組的數(shù)組名是指向第一行第一個元素的指針。數(shù)組名+1,步進值是一行的大小。

1.語法格式

數(shù)據(jù)類型 (*指針名)[數(shù)組長度];

int (*p)[5];   // 數(shù)組指針:p是指針,指向一個「int[5]類型」的數(shù)組
char (*q)[10]; // 數(shù)組指針:q是指針,指向一個「char[10]類型」的數(shù)組

關(guān)鍵:必須加括號 (),強制 p 先與 * 結(jié)合,確定是指針,再由 [5] 確定指向的數(shù)組類型(int [5])。

2.常見用法

指向二維數(shù)組、作為函數(shù)參數(shù)接收二維數(shù)組(避免二維數(shù)組傳參退化問題)。

  • 指向二維數(shù)組并遍歷
#include <stdio.h>

int main() {
    // 二維數(shù)組:3個元素,每個元素是int[5]類型的一維數(shù)組
    int arr[3][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};

    // 數(shù)組指針:p指向int[5]類型的數(shù)組(與二維數(shù)組的元素類型匹配)
    int (*p)[5] = arr; 

    // 遍歷二維數(shù)組(3種等價寫法)
    for (int i = 0; i < 3; i++) 
    {
        for (int j = 0; j < 5; j++) 
        {
            // 寫法1:p[i][j](最直觀,等價于二維數(shù)組訪問)
            // 寫法2:*(p[i] + j)(p[i]是第i個一維數(shù)組的首地址)
            // 寫法3:*(*(p + i) + j)(p+i指向第i個一維數(shù)組)
            printf("%d ", *(*(p + i) + j));
        }
        printf("\n");
    }

    return 0;
}

輸出:

1 2 3 4 5 

6 7 8 9 10 

11 12 13 14 15 

核心邏輯:arr 是二維數(shù)組首地址(指向 arr [0],即第一個 int [5] 數(shù)組),與數(shù)組指針 p 的類型完全匹配,因此 p = arr 合法。

  • 作為函數(shù)參數(shù)接收二維數(shù)組
#include <stdio.h>

// 函數(shù)參數(shù):用數(shù)組指針接收二維數(shù)組(int[3][5]退化為int(*)[5])
void print2DArray(int (*p)[5], int row) 
{
    for (int i = 0; i < row; i++) 
    {
        for (int j = 0; j < 5; j++) 
        {
            printf("%d ", p[i][j]);
        }
        printf("\n");
    }
}

int main() 
{
    int arr[3][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
    // 傳參:直接傳入二維數(shù)組名(退化為數(shù)組指針)
    print2DArray(arr, 3); 
    return 0;
}

輸出:

1 2 3 4 5 

6 7 8 9 10 

11 12 13 14 15 

注意:函數(shù)參數(shù)中 int (*p)[5] 等價于 int p[ ][5](兩者都是數(shù)組指針的簡寫),但不能寫成 int *p[5](這是指針數(shù)組,類型不匹配)。

到此這篇關(guān)于C語言中指針數(shù)組和數(shù)組指針的具體用法的文章就介紹到這了,更多相關(guān)C語言 指針數(shù)組和數(shù)組指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的形參和實參區(qū)別解析

    C++中的形參和實參區(qū)別解析

    這篇文章主要介紹了C++中的形參和實參區(qū)別解析,本文將從定義、特性、傳遞方式等多個維度深入解析,幫你徹底掌握這對重要概念,需要的朋友可以參考下
    2025-09-09
  • C++版圖書管理系統(tǒng)

    C++版圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++版圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++超詳細梳理lambda和function的使用方法

    C++超詳細梳理lambda和function的使用方法

    C++在C11標準中引入了匿名函數(shù),即沒有名字的臨時函數(shù),又稱之為lambda表達式.lambda表達式 實質(zhì)上是創(chuàng)建一個匿名函數(shù)/對象,這篇文章主要介紹了lambda和function的使用方法
    2022-08-08
  • 詳解C語言如何實現(xiàn)配置文件的讀寫

    詳解C語言如何實現(xiàn)配置文件的讀寫

    這篇文章主要為大家詳細介紹了如何使用C語言實現(xiàn)配置文件的讀寫,包括定義全局宏、公用函數(shù)、比較字符串等功能,需要的可以參考一下
    2024-11-11
  • C語言實現(xiàn)文件讀寫功能流程

    C語言實現(xiàn)文件讀寫功能流程

    這篇文章主要介紹了C語言實現(xiàn)文件讀寫,文件是一段數(shù)據(jù)的集合,這些數(shù)據(jù)可以是有規(guī)則的,也可以是無序的集合。在stdio.h有一個非常重要的東西,文件指針,每個文件都會在內(nèi)存中開辟一塊空間,用于存放文件的相關(guān)信息
    2022-12-12
  • 純C語言實現(xiàn)五子棋

    純C語言實現(xiàn)五子棋

    本文給大家分享的是去年制作的一個純C語言實現(xiàn)的五子棋的代碼,雖然沒有帶漂亮的界面,還是推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 使用QT連接USB攝像頭的方法

    使用QT連接USB攝像頭的方法

    這篇文章主要為大家詳細介紹了使用QT連接USB攝像頭的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 最新評論

    清远市| 客服| 黑龙江省| 岢岚县| 永宁县| 山西省| 隆安县| 都江堰市| 揭西县| 汪清县| 合作市| 天峻县| 两当县| 漯河市| 土默特左旗| 柳江县| 壶关县| 罗定市| 西盟| 日土县| 吉首市| 隆化县| 连平县| 平谷区| 德保县| 邵东县| 阿荣旗| 新郑市| 祁阳县| 乌苏市| 庐江县| 错那县| 澄城县| 炎陵县| 衡阳县| 武平县| 济阳县| 九龙县| 岳阳市| 海淀区| 高州市|