0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

C語言數(shù)組和指針的區(qū)別

冬至子 ? 來源:嵌入式老林 ? 作者:嵌入式老林 ? 2023-05-30 10:55 ? 次閱讀

一、數(shù)組和指針的介紹

指針是一個變量,它存儲了一個內(nèi)存地址,該地址指向一個變量的存儲位置。通過指針,可以訪問和修改指向的變量。數(shù)組是一個由相同數(shù)據(jù)類型元素組成的集合,可以通過索引來訪問和修改這些元素。

二、兩者之間的區(qū)別

1,存儲方式

數(shù)組:數(shù)組在內(nèi)存中是連續(xù)存放的,開辟一塊連續(xù)的內(nèi)存空間。數(shù)組是根據(jù)數(shù)組的下進行訪問的,數(shù)組的存儲空間,不是在靜態(tài)區(qū)就是在棧上。

指針:指針很靈活,它可以指向任意類型的數(shù)據(jù)。

指針p存儲的是一個內(nèi)存地址,這個地址指向的是某種類型變量的存儲空間。如果要訪問這個變量,需要使用指針運算符(*)來解引用指針,將指針所指向的地址轉換為所指向的變量的值。指針的值也可以改變,通過指針運算符(&)獲取變量的地址,然后將其賦給指針變量。

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  // 
int a = 10;
int* p = &arr[0];  // 數(shù)組下標訪問第一個元素,取地址后是第一個元素的地址
//int* p = arr;  // 跟上面這行是等價的,數(shù)組名表示這個數(shù)組第一個數(shù)據(jù)的指針,此時數(shù)組和指針是“通用的”
p = &a;  // 指向a變量的地址,此時 *p取到的值就是a變量的值

2,賦值方式

同類型指針變量可以相互賦值,數(shù)組不行,只能一個一個元素的賦值或拷貝

3,占用空間大小

數(shù)組的大小取決于數(shù)組元素的類型和元素個數(shù)

數(shù)組所占存儲空間的內(nèi)存:sizeof(數(shù)組名)

數(shù)組的大?。簊izeof(數(shù)組名)/sizeof(數(shù)據(jù)類型)

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  // 占40個字節(jié)
int* p = arr;  // 占4個字節(jié)(32位系統(tǒng))
char c = 'A';
char* p2 = &c;  // 占4個字節(jié)(32位系統(tǒng))

指針無論是什么類型,在32位平臺是占4 byte,在64位平臺是占8 byte

4, 可變性

數(shù)組的大小在定義時就已經(jīng)確定,無法改變,而指針可以隨時指向不同的變量,從而實現(xiàn)動態(tài)變化。

三、數(shù)組指針和指針數(shù)組的區(qū)別

指針數(shù)組 :首先是一個數(shù)組,只不過數(shù)組的每個成員是一個指針變量。

數(shù)組指針 :首先是一個指針,這個指針指向一個數(shù)組。

代碼:

int *p1[10];  // 指針數(shù)組,[]的優(yōu)先級大于*,p1是一個數(shù)組,數(shù)組的值是一個指針
int (*p2)[10];  // 數(shù)組指針

圖片

對于指針數(shù)組,p1先和“[]”結合,構成一個數(shù)組的定義,數(shù)組名為p1,int *修飾的是數(shù)組的內(nèi)容,即數(shù)組的每個元素。那么它本質是一個數(shù)組,這個數(shù)組里有10個指向int類型數(shù)據(jù)的指針。

對于數(shù)組指針,“()”的優(yōu)先級比“[]”高,“*”和p2 構成一個指針的定義,指針變量名為p2,int 修飾的是數(shù)組的內(nèi)容,即數(shù)組的每個元素。數(shù)組在這里并沒有名字,是個匿名數(shù)組。那么它本質是一個指針,它指向一個包含10個int 類型數(shù)據(jù)的數(shù)組。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7430

    瀏覽量

    163517
  • C語言
    +關注

    關注

    180

    文章

    7594

    瀏覽量

    135861
收藏 人收藏

    評論

    相關推薦

    C語言數(shù)組名和指針

    指針C/C++語言的特色,而數(shù)組名與指針有太多的相似,甚至很多時候,
    發(fā)表于 08-27 17:48 ?705次閱讀

    C語言數(shù)組指針區(qū)別

    大家好,我是嵌入式老林,從事嵌入式軟件開發(fā)多年,今天分享的內(nèi)容是C語言數(shù)組指針區(qū)別,希望能對你有所幫助。
    發(fā)表于 07-11 12:40 ?358次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>數(shù)組</b>和<b class='flag-5'>指針</b>的<b class='flag-5'>區(qū)別</b>

    C語言中指針數(shù)組數(shù)組指針區(qū)別

    指針數(shù)組之間存在著緊密的關系。在本文中,我們將探討指針數(shù)組的關系、指針算術和數(shù)組遍歷、多維
    發(fā)表于 08-17 15:29 ?391次閱讀

    C語言——指針、數(shù)組和函數(shù)

    C語言——指針、數(shù)組和函數(shù)基本解釋   1、指針的本質是一個與地址相關的復合類型,它的值是數(shù)據(jù)存放的位置(地址);
    發(fā)表于 04-20 15:25

    C51語言指針、結構、聯(lián)合和枚舉

     指針C51語言的精華也是難點。本章主要介紹指針的概念、定義指針的方法,介紹指向一維數(shù)組
    發(fā)表于 06-12 23:47 ?112次下載

    C語言入門教程-用指針操作數(shù)組

    C語言入門教程 在C語言中,數(shù)組指針的關系十分密切。要想有效地使用
    發(fā)表于 07-29 12:18 ?1480次閱讀

    c語言函數(shù)指針定義,指針函數(shù)和函數(shù)指針區(qū)別

     往往,我們一提到指針函數(shù)和函數(shù)指針的時候,就有很多人弄不懂。下面就由小編詳細為大家介紹C語言中函數(shù)指針,
    發(fā)表于 11-16 15:18 ?3606次閱讀

    指針數(shù)組都是C語言的精髓所在 兩者有何聯(lián)系區(qū)別

    指針數(shù)組都是C語言的精髓所在,對于很多C程序員來說,如果你問這樣一個問題:數(shù)組
    的頭像 發(fā)表于 05-27 14:51 ?4041次閱讀
    <b class='flag-5'>指針</b>和<b class='flag-5'>數(shù)組</b>都是<b class='flag-5'>C</b><b class='flag-5'>語言</b>的精髓所在 兩者有何聯(lián)系<b class='flag-5'>區(qū)別</b>

    詳談數(shù)組指針區(qū)別與聯(lián)系

    詳談數(shù)組指針區(qū)別與聯(lián)系
    的頭像 發(fā)表于 06-29 15:18 ?2.2w次閱讀
    詳談<b class='flag-5'>數(shù)組</b>和<b class='flag-5'>指針</b>的<b class='flag-5'>區(qū)別</b>與聯(lián)系

    指針數(shù)組數(shù)組指針區(qū)別

    這里我們區(qū)分兩個重要的概念:指針數(shù)組、數(shù)組指針
    的頭像 發(fā)表于 06-29 15:30 ?2w次閱讀
    <b class='flag-5'>指針</b><b class='flag-5'>數(shù)組</b>和<b class='flag-5'>數(shù)組</b><b class='flag-5'>指針</b>的<b class='flag-5'>區(qū)別</b>

    C語言指針數(shù)組區(qū)別

    C語言教程中我們使用通過數(shù)組名通過偏移和指針偏移都可以遍歷數(shù)組,那么指針
    的頭像 發(fā)表于 07-18 16:29 ?1878次閱讀

    C語言進階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?

    C語言進階】“數(shù)組指針”和“指針數(shù)組”都是啥跟啥?
    的頭像 發(fā)表于 08-31 13:21 ?1869次閱讀

    C語言中的char數(shù)組和char指針有什么區(qū)別?

    讓我們通過下面的例子,來了解 C語言中字符數(shù)組和字符指針之間的區(qū)別。
    的頭像 發(fā)表于 01-29 16:35 ?2596次閱讀

    C語言數(shù)組元素的指針

    C語言調(diào)用函數(shù)時虛實結合的方法都是采用“值傳遞”方式,當用變量名作為函數(shù)參數(shù)時傳遞的是變量的值,當用數(shù)組名作為函數(shù)參數(shù)時。 由于數(shù)組名代表的是
    的頭像 發(fā)表于 03-10 14:45 ?821次閱讀

    C語言中什么是指針數(shù)組

    C語言中一個數(shù)組,若其元素均為指針類型數(shù)據(jù),稱為指針數(shù)組,也就是說,
    的頭像 發(fā)表于 03-10 15:26 ?1633次閱讀