一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C語言基礎(chǔ)指針詳解教程

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

2022-02-27 16:15RookieStriver C/C++

此處對于指針做一些簡要的介紹,作者實屬初學(xué),寫博客也是作者學(xué)習(xí)的一個過程,難免文章中有內(nèi)容理解不到位或者有不當(dāng)之處,還請朋友們不吝指正,希望大家給予支持

 

1.1:概述

 

1.1.1:內(nèi)存

內(nèi)存含義:

  • 儲存器:用來存儲程序和數(shù)據(jù),輔助CPU進(jìn)行運算處理的重要組成部分。
  • 內(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ù)類型,指針變量是一種存放地址編號的變量。

-‘*" 解引用操作符,表示指針?biāo)傅膬?nèi)存空間的具體內(nèi)容。

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

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

解引用操作符的運用:

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

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

 

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

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

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

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

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

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

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

 

1.2.3:指針的大小

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

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

 

1.2.4:空指針與野指針

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

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

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

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

 

1.2.4:萬能指針

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

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

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

1.2.5:const修飾的指針變量

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

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

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

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

注:在編寫程序時,指針作為函數(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ù)組比較麻煩,可讀性差。無奈博主學(xué)藝不精呀。

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

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

 

1.3.3:指針的加減運算

(1) 加法運算

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

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

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

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

(2) 減法運算

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

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

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

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

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

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

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

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

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

 

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

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

 

1.5:總結(jié)

OK!!!觀眾老爺們,這里只是介紹了指針的入門知識,如果朋友們覺得有一點點作用的話,希望朋友們能夠給予小菜鳥一點支持!后續(xù)繼續(xù)給朋友們帶來更好的博文,還希望朋友們能夠繼續(xù)關(guān)注,小菜鳥致力于把自己的學(xué)習(xí)經(jīng)驗與個人理解更多的分享給大家,望大家喜歡與指正,希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_43727529/article/details/120805159

延伸 · 閱讀

精彩推薦
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進(jìn)行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當(dāng)程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現(xiàn)電腦關(guān)機(jī)程序

    C語言實現(xiàn)電腦關(guān)機(jī)程序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)電腦關(guān)機(jī)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
主站蜘蛛池模板: 国产rpg迷雾之风冷狐破解 | 国产美女亚洲精品久久久综合 | 黑人干亚洲人 | 国产精品色拉拉免费看 | 久久免费看少妇高潮A片JA | 日韩成片 | 亚洲国产欧美在线人成aaa | dasd817黑人在线播放 | 国产一卡二卡3卡4卡更新 | 5555国产在线观看精品 | 4hu影院永久在线播放 | 免费大片 | 白丝超短裙被输出娇喘不停小说 | 暖暖 免费 高清 中文 日本 | 被黑人同学彻底征服全文小说阅读 | x8x8在线观看免费 | 午夜秀场在线观看 | chanelpreston欧美网站| 高跟丝袜人妖sissy露出调教 | 国产探花视频在线观看 | 欧美日韩亚洲另类人人澡 | 色综合天天综合网看在线影院 | 日本一区二区三区在线 观看网站 | 日本一区二区在线不卡 | 91青青国产在线观看免费 | 波多野给衣一区二区三区 | 13 sewang41| 精品无码国产污污污免费网站2 | 色帝国亚洲欧美在线蜜汁tv | se婷婷| 2020年最新国产精品视频免费 | 欧美ⅹxxxx视频 | 色老板视频 | 国产精品久久久久久福利 | 俄罗斯海滩厕所偷窥 | 日韩一区国产二区欧美三 | 精品国产一区二区三区国产馆 | 亚洲一区二区三区在线播放 | 欧美亚洲第一页 | 99热久热这里只精品 | yjsp妖精视频在线观看免费 |