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

C語言指針基礎(chǔ)詳解

 更新時間:2021年10月21日 16:12:10   作者:RookieStriver  
這篇文章主要介紹了C語言指針的基礎(chǔ),主要對C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學習C語言的基礎(chǔ),需要的朋友可以參考下

1.1:概述

1.1.1:內(nèi)存

內(nèi)存含義:

  • 儲存器:用來存儲程序和數(shù)據(jù),輔助CPU進行運算處理的重要組成部分。
  • 內(nèi)存:內(nèi)部存儲器,暫時存放程序/數(shù)據(jù)。
  • 外存:外部儲存器,長時間保存程序/數(shù)據(jù)。

1.1.2:內(nèi)存

內(nèi)存地址:

  • 可以理解為將內(nèi)存抽象成一個很大的一維數(shù)組。
  • 編碼就是將內(nèi)存的每一個字節(jié)分配一個32位或者64位的編號。這個內(nèi)存編號我們就稱為地址

1.1.3:指針和指針變量

  • 內(nèi)存中每一個字節(jié)都有一個編號,我們稱之為”地址“。
  • 指針的實質(zhì)就是內(nèi)存的”地址“。地址就是指針,指針也就是地址。
  • 指針是地址,而定義的指針變量是存放地址的變量。

1.2:指針基礎(chǔ)知識

1.2.1:指針變量的定義和使用

- 指針是一種數(shù)據(jù)類型,指針變量是一種存放地址編號的變量。

-‘*' 解引用操作符,表示指針所指的內(nèi)存空間的具體內(nèi)容。

打印變量的地址:(用%p)

在這里插入圖片描述

解引用操作符的運用:

在這里插入圖片描述

int * 代表了指針類型,p是定義的指針類型的變量,將a的地址賦給變量P,這是p中存的是a的地址編號,p就指向了a的空間,*P就表示a空間里的內(nèi)容,也就是a的值。

1.2.2:通過指針間接修改變量的值

前面我們提到了關(guān)于由const修飾的局部變量的修改,不可以通過賦值直接修改,這里我們介紹通過指針間接的修改變量的值。

在這里插入圖片描述

當直接修改由const修飾的常量時,我們可以看出會發(fā)生錯誤。

在這里插入圖片描述

這時我們定義一個指針變量間接的修改局部變量的值是可以的!我們用個圖來輔助理解:

在這里插入圖片描述

1.2.3:指針的大小

  • sizeof() 測得是指針變量指向的儲存地址的大小。
  • 在32位平臺,所有指針地址都是32位(4字節(jié))。
  • 在64位平臺,所有指針地址都是64位(8字節(jié))。

1.2.4:空指針與野指針

  • 空指針(NULL):主要用于給指針變量初始化,空指針是指向內(nèi)存地址編號為0的空間。int * P = NULL;
  • 野指針:對我個人理解而言,對于野指針我理解為指向一個未知的空間,(通俗來講,就是我雖然知道這塊內(nèi)存的地址編號,但是我并不知道這塊內(nèi)存具體存放的是什么內(nèi)容)。下面我介紹兩野指針常見錯誤。

①:任意數(shù)值賦值給野指針。

②:操作野指針指向的內(nèi)存區(qū)域。

在這里插入圖片描述

1.2.4:萬能指針

這里我們不做詳細的介紹,void * 指針可以指向任意變量的內(nèi)存空間:

在這里插入圖片描述

特別注意:我們在對萬能指針進行操作時,因為系統(tǒng)需要知道具體需要對幾個字節(jié)的內(nèi)容進行操作,所以我們需要強轉(zhuǎn)成具體的指針類型。

1.2.5:const修飾的指針變量

const修飾指針變量時,因const的位置不同,修飾的意義也有所不同,如下代碼:

在這里插入圖片描述

對于p1 ,const可以理解為修飾的*p1,也就是修飾的空間的內(nèi)容,這時這塊空間的地址是可以重新賦值的,而內(nèi)容不可以!

對于p2,const修飾的是指針變量p2,也就是修飾的空間地址,所以這時可以對內(nèi)容進行輔助,而不可以改變變量的地址!

注:在編寫程序時,指針作為函數(shù)參數(shù)傳遞,如果對應(yīng)的內(nèi)存空間的值不會被修改,可以使用const修飾指針數(shù)據(jù)類型。

1.3:指針與數(shù)組

1.3.1:數(shù)組名

敲重點:對一維數(shù)組來說,數(shù)組名是首元素地址,是一個常量?。?,不可以修改,切記切記,對二維數(shù)組來說,此時數(shù)組名也是首元素地址,只不過此時的首元素不再只是一個元素,而是一個一維數(shù)組。

1.3.2:指針操作數(shù)組

其實博主覺得,用指針操作數(shù)組可讀性還是比較差,而且后續(xù)面對多維數(shù)組,用指針來操作數(shù)組比較麻煩,可讀性差。無奈博主學藝不精呀。

在這里插入圖片描述

這里*(arr + i) 與arr[i]的效果一摸一樣,這里的知識點涉及到指針的加減運算,見下一小節(jié)。

1.3.3:指針的加減運算

(1) 加法運算

指針計算絕對不是簡單的整數(shù)相加,這里與指針類型有關(guān):

  • 如果是一個整型指針,那么+1的效果就是變化一個int的大小。
  • 如果是一個字符型指針,那么+1的效果就是變化一個char的大小。

在這里插入圖片描述

此時數(shù)組名是首元素1的地址,屬于整型指針,+2表示變化2個int的大小,也就是第三個元素的地址。

(2) 減法運算

這里對于指針減一個整數(shù)的作用與加法如出一轍,也是與指針類型有關(guān)。

在這里插入圖片描述

這里我們利用一個逆序打印數(shù)組來說明指針減法,特別注意 arr與&arr分別+1的區(qū)別,arr表示的是首元素地址,&arr表示的是整個數(shù)組的地址,arr + 1變化4字節(jié),而&arr + 1 變化的是整個數(shù)組大小的字節(jié)數(shù)(36)。如圖:

在這里插入圖片描述

在這里插入圖片描述

我們可以看出,打印&arr與arr的地址編號是一樣的,但是意義是不一樣的。 1.3.4:指針數(shù)組

指針數(shù)組還是一個數(shù)組,數(shù)組元素都是指針類型,拿一級指針數(shù)組舉例:

在這里插入圖片描述

這里博主提一點自己對一級指針數(shù)組的理解,希望對大家有一丟丟幫助,一級指針數(shù)組我把它與二級指針、二維數(shù)組相對應(yīng),這里不做詳細解釋,后續(xù)指針強化我會解釋我的理解,這種理解可能按官方說法來說不嚴謹,但是能幫助我們理解就好。

1.4:指針基礎(chǔ)小結(jié)

  • int i:定義整型變量
  • int * p:定義一個指向int的指針變量
  • int **p:定義一個二級指針,指向一級指針。
  • int arr[10]:定義一個有10個整型元素的數(shù)組。
  • int *arr[10]:定義一個有10個一級指針元素的數(shù)組。

1.5:總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++ LeetCode1832題解判斷句子是否為全字母句

    C++ LeetCode1832題解判斷句子是否為全字母句

    這篇文章主要為大家介紹了C++ LeetCode1832題解判斷句子是否為全字母句示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C++中 set的用法

    C++中 set的用法

    這篇文章主要介紹了C++中 set的用法,set的內(nèi)部使用了紅黑樹對所有的元素進行了排序。在樹結(jié)構(gòu)當中,我們通常使用的都是<key, value>的形式。下面我們來看看該內(nèi)容的具體情況,需要的朋友也可以參考一下
    2021-11-11
  • C++之list容器模擬實現(xiàn)方式

    C++之list容器模擬實現(xiàn)方式

    這篇文章主要介紹了C++之list容器模擬實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++ Qt QColorDialog使用方法

    C++ Qt QColorDialog使用方法

    本文主要介紹了C++ Qt QColorDialog使用方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解C語言初階基礎(chǔ)(2)

    詳解C語言初階基礎(chǔ)(2)

    這篇文章主要介紹了C語言中的初階基礎(chǔ),介紹了其相關(guān)概念,具有一定參考價值。需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-11-11
  • C語言循環(huán)結(jié)構(gòu)詳解

    C語言循環(huán)結(jié)構(gòu)詳解

    本文主要介紹C語言循環(huán)結(jié)構(gòu)的基礎(chǔ)知識,這里整理了循環(huán)的基礎(chǔ)資料并附簡單的代碼示例詳細講解,有需要的小伙伴可以參考下
    2021-10-10
  • C++使用循環(huán)計算標準差的代碼實現(xiàn)

    C++使用循環(huán)計算標準差的代碼實現(xiàn)

    在C++中,計算標準差可以使用循環(huán)來實現(xiàn),本文給大家介紹了一個示例代碼,演示了如何使用循環(huán)計算標準差,文中示例代碼介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • c++歸并排序詳解

    c++歸并排序詳解

    歸并排序遵循分治法的思想:將原問題分解為幾個規(guī)模較小但類似于原問題的子問題,遞歸地求解這些子問題,然后再合并這些子問題的解來建立原問題的解。分治模式在每層遞歸時都有三個步驟:分解、解決、合并。歸并排序完全遵循該模式。
    2017-05-05
  • OpenCV實現(xiàn)人臉識別簡單程序

    OpenCV實現(xiàn)人臉識別簡單程序

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)人臉識別簡單程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C++中的hpp文件及使用hpp文件的好處

    C++中的hpp文件及使用hpp文件的好處

    hpp文件是C++程序中一種特殊頭文件,它可以包含類的聲明和實現(xiàn),詳細介紹了使用hpp文件的好處及注意事項,感興趣的朋友跟隨小編一起看看吧
    2024-02-02

最新評論

施秉县| 靖西县| 桐城市| 卢龙县| 民勤县| 宜都市| 滦南县| 平远县| 马公市| 唐河县| 柞水县| 平邑县| 龙陵县| 阜平县| 邵东县| 东乌珠穆沁旗| 隆尧县| 黔江区| 喀什市| 阜宁县| 灵川县| 库尔勒市| 闸北区| 民权县| 四会市| 彝良县| 通道| 门头沟区| 磴口县| 邳州市| 海兴县| 准格尔旗| 东宁县| 寿阳县| 锡林浩特市| 定陶县| 津市市| 滨海县| 彩票| 龙里县| 常德市|