91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言指針的基礎知識點有哪些

發布時間:2022-03-04 14:49:27 來源:億速云 閱讀:129 作者:小新 欄目:開發技術

這篇文章主要介紹了C語言指針的基礎知識點有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    1.1:概述

    1.1.1:內存

    內存含義:

    • 儲存器:用來存儲程序和數據,輔助CPU進行運算處理的重要組成部分。

    • 內存:內部存儲器,暫時存放程序/數據。

    • 外存:外部儲存器,長時間保存程序/數據。

    1.1.2:內存

    內存地址:

    • 可以理解為將內存抽象成一個很大的一維數組。

    • 編碼就是將內存的每一個字節分配一個32位或者64位的編號。這個內存編號我們就稱為地址

    1.1.3:指針和指針變量

    • 內存中每一個字節都有一個編號,我們稱之為”地址“。

    • 指針的實質就是內存的”地址“。地址就是指針,指針也就是地址。

    • 指針是地址,而定義的指針變量是存放地址的變量。

    1.2:指針基礎知識

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

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

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

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

    C語言指針的基礎知識點有哪些

    解引用操作符的運用:

    C語言指針的基礎知識點有哪些

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

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

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

    C語言指針的基礎知識點有哪些

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

    C語言指針的基礎知識點有哪些

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

    C語言指針的基礎知識點有哪些

    1.2.3:指針的大小

    • sizeof() 測得是指針變量指向的儲存地址的大小。

    • 在32位平臺,所有指針地址都是32位(4字節)。

    • 在64位平臺,所有指針地址都是64位(8字節)。

    C語言指針的基礎知識點有哪些

    1.2.4:空指針與野指針

    • 空指針(NULL):主要用于給指針變量初始化,空指針是指向內存地址編號為0的空間。int * P = NULL;

    • 野指針:對我個人理解而言,對于野指針我理解為指向一個未知的空間,(通俗來講,就是我雖然知道這塊內存的地址編號,但是我并不知道這塊內存具體存放的是什么內容)。下面我介紹兩野指針常見錯誤。

    ①:任意數值賦值給野指針。

    ②:操作野指針指向的內存區域。

    C語言指針的基礎知識點有哪些

    1.2.4:萬能指針

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

    C語言指針的基礎知識點有哪些

    特別注意:我們在對萬能指針進行操作時,因為系統需要知道具體需要對幾個字節的內容進行操作,所以我們需要強轉成具體的指針類型。

    1.2.5:const修飾的指針變量

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

    C語言指針的基礎知識點有哪些

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

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

    注:在編寫程序時,指針作為函數參數傳遞,如果對應的內存空間的值不會被修改,可以使用const修飾指針數據類型。

    1.3:指針與數組

    1.3.1:數組名

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

    1.3.2:指針操作數組

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

    C語言指針的基礎知識點有哪些

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

    1.3.3:指針的加減運算

    (1) 加法運算

    指針計算絕對不是簡單的整數相加,這里與指針類型有關:

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

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

    C語言指針的基礎知識點有哪些

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

    (2) 減法運算

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

    C語言指針的基礎知識點有哪些

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

    C語言指針的基礎知識點有哪些

    C語言指針的基礎知識點有哪些

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

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

    C語言指針的基礎知識點有哪些

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

    1.4:指針基礎小結

    • int i:定義整型變量

    • int * p:定義一個指向int的指針變量

    • int **p:定義一個二級指針,指向一級指針。

    • int arr[10]:定義一個有10個整型元素的數組。

    • int *arr[10]:定義一個有10個一級指針元素的數組。

    感謝你能夠認真閱讀完這篇文章,希望小編分享的“C語言指針的基礎知識點有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    哈巴河县| 韶关市| 皮山县| 宁国市| 荔浦县| 辽阳县| 崇明县| 宕昌县| 上思县| 宁波市| 华池县| 卢湾区| 大关县| 山阴县| 芒康县| 河津市| 沙坪坝区| 乌鲁木齐县| 杭州市| 高要市| 习水县| 沧源| 邮箱| 宿松县| 江阴市| 通化县| 武城县| 木兰县| 洛阳市| 丹东市| 昭苏县| 洛川县| 叙永县| 辽阳市| 林芝县| 富民县| 章丘市| 沙河市| 云浮市| 保定市| 固镇县|