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

c語言?指針零基礎講解

 更新時間:2022年02月09日 14:32:32   作者:誠摯的喬治  
指針是指向另一個變量的變量。意思是一個指針保存的是另一個變量的內(nèi)存地址。換句話說,指針保存的并不是普通意義上的數(shù)值,而是另一個變量的地址值。一個指針保存了另一個變量的地址值,就說這個指針“指向”了那個變量

1.指針是什么(可能有點難理解)

指針的是啥?

指針實際上就是地址,地址就是系統(tǒng)給定的編號,編號就是一個個內(nèi)存單元。

在某種情況來說指針=地址=編號=內(nèi)存單元。

指針就是地址,顧名思義,就是可以用來尋找目標的。

所以指針變量就是存放地址的變量。

當然我們口頭上常說的指針就是指針變量~

那指針是怎么產(chǎn)生的呢,也就是說內(nèi)存是怎樣產(chǎn)生的呢?

我們知道我們的計算機就是32位或64位系統(tǒng)組成,這32與64在物理上就是32根物理電線或64根物理電線組成。這物理電線通電時,就會產(chǎn)生高電頻,從而產(chǎn)生電信號,再由電信號轉變?yōu)閿?shù)字信號,在我們計算機上就顯示數(shù)字信號,我們知道計算機只能識別二進制系列數(shù)字,所以這就最終變?yōu)?與0組成的數(shù)字信號。最終就有二的三十二或六十四次方的存儲空間,經(jīng)過換算,也就是4或8個GB,也就是內(nèi)存,當然這些都是有硬件決定的。

而指針的大小也就是4個字節(jié)或八個字節(jié)組成(與指針的類型無關)

原理:指針的大小由系統(tǒng)決定,比如32位系統(tǒng),就由32給比特位組成,

比如00000000000000000000000000000001

也就是4個字節(jié)~

也就是說無論是char類型還是int類型指針大小都是4或8(在64位系統(tǒng)上)個字節(jié)。

2. 指針和指針的類型

int a=10;

int* pa=&a;     //此時int*就是指針pa的類型,而pa就是指針變量,來儲存地址的~

指針類型分很多種如int,float,double等;

既然大小都是四個字節(jié),那為什么要區(qū)分不同類型的指針呢?

這就要說到指針類型的特點:

1.指針類型決定解引用時訪問幾個字節(jié);一個int類型指針就直接訪問4給字節(jié)的空間,一個char類型就只能訪問一個空間的內(nèi)存等等

2.指針類型決定了指針向前一步或向后一步能走多遠的距離。就比如說int類型的指針加一個單位就相當于走了四個字節(jié)的空間。

從圖上就可以看到,當指針變量的類型是int型時,指針變量加一,地址就變了四個字節(jié)的,當指針是char類型的時候,指針變量加一就變成跳過一個字節(jié)的單位了。

可以連續(xù)定義多個指針如:

int*pa,*pb;(并不是int*pa,pb);

3.野指針

所謂野指針就是沒有地址的指針,系統(tǒng)就會出現(xiàn)錯誤,都是造成野指針的情況下,系統(tǒng)往往都不會報錯,都不能說明,野指針就是正確的,就比如說,一個小偷,沒被進警察抓到就能說明他的行為是對的嗎?回答是,當然不能。

雖然最終程序依然可以運行,但是最終的結果并不會是預期的那樣。這時候就占用了一塊未申請的空間了。這塊空間的內(nèi)容是隨機的。

那野指針是怎樣造成的呢?怎樣避免野指針的發(fā)生呢?

造成原因:

1.由于指針未定義,就開始使用。

比如:

          int*p;

          *p=20;

2.指針的越界訪問,這常常體現(xiàn)在數(shù)組里。

這就出現(xiàn)溢出的情況了~

3.指針指向的空間釋放,在函數(shù)中很常見。

既然出現(xiàn)了野指針,那有什么辦法可以避免野指針的出現(xiàn)呢?

解決方案

1.給指針初始話

2.小心指針越界

3.指針指向的空間釋放后,及時定位NULL,防止被再次使用。

4.避免返回局部變量地址。

5.指針使用前先檢測有效性。

4.指針的運算

4.1 指針的加減整數(shù)的運算

指針加減一個整數(shù),地址就會有相應的變化;

4.2 指針-指針

這里的指針-指針,最終的結果是中間的元素個數(shù)(而不是中間有幾個字節(jié))

幾個字節(jié)由指針的類型決定;

當然,既然由減,肯定有人會問為什么沒加呢(問得好,下次別問了)

兩指針相減,得到的是兩個地址中間的元素個數(shù),那相加就沒有什么特別的含義了,所以不存在相加。

舉個例子

我們平時計算字符串的長度通常有三種方法(1.計數(shù)器 2.遞歸 3.就是指針-指針)

前兩種方法就不講了~                 (前提是兩個指針是指向同一塊空間)

5.指針與數(shù)組

指針是地址,口頭上也就是指針變量~

數(shù)組是什么:數(shù)組就是相同類型數(shù)據(jù)的集合~

這似乎兩者沒什么關系,但是實際上我們可以通過指針來訪問數(shù)組。

事實證明:*(p+i)    *(arr+i)    arr[i]   p[i] 這四種情況的結果是相同的,都可以訪問元素

他們代表的意義是相同的?。?!

6.二級指針

你可能會擔心很難(我指針都不懂,還二級指針,不看了)

別~~~~

其實二級與多級指針都很容易

二級指針指向的就是存放一級指針的地址(指針)

 int main()
{
    int a = 10;
    int* pa = &a;
    int** ppa = &pa;//ppa就是一個二級指針
    **ppa = 20;
    printf("%d\n", a);


    //int*** pppa = &ppa;//pppa就是三級指針

    return 0;
}

7.指針數(shù)組

指針數(shù)組是數(shù)組還是指針呢?

答案是:數(shù)組,是用來存放指針的數(shù)組。

除了指針數(shù)組外,其實我們還學習了整形數(shù)組和浮點型數(shù)組;

比如:

int* arr[4]={&a,&b,&c,&d}

&a
&b
&c
&d

int arr[4]={a,b,c,d}

a
b
c
d

對比一下,是不是很容易理解了,數(shù)組就是裝有相同類型的數(shù)據(jù),而指針數(shù)組也一樣,只是里面裝的都是一個個指針,不要想的很難哦~

到此這篇關于c語言 指針零基礎講解的文章就介紹到這了,更多相關c語言 指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++實現(xiàn)LeetCode(38.計數(shù)和讀法)

    C++實現(xiàn)LeetCode(38.計數(shù)和讀法)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(38.計數(shù)和讀法),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言也有封裝,繼承和多態(tài)你知道嗎

    C語言也有封裝,繼承和多態(tài)你知道嗎

    這篇文章主要為大家詳細介紹了C語言封裝,繼承,多態(tài),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C/C++ 讀取16進制文件的方法

    C/C++ 讀取16進制文件的方法

    下面小編就為大家?guī)硪黄狢/C++ 讀取16進制文件的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Visual Studio Code 2020安裝教程及CPP環(huán)境配置(教程圖解)

    Visual Studio Code 2020安裝教程及CPP環(huán)境配置(教程圖解)

    這篇文章主要介紹了Visual Studio Code 2020安裝教程、CPP環(huán)境配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C++自動析構時的順序問題

    C++自動析構時的順序問題

    這篇文章主要介紹了C++自動析構時的順序,通過實例代碼給大家講解了C++ 構造與析構的執(zhí)行順序,代碼簡單易懂,非常不錯對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言函數(shù)指針的使用詳解

    C語言函數(shù)指針的使用詳解

    在C語言中,函數(shù)指針是指向函數(shù)的指針變量,本文主要介紹了C語言函數(shù)指針的使用詳解,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 詳解C++虛函數(shù)中多態(tài)性的實現(xiàn)原理

    詳解C++虛函數(shù)中多態(tài)性的實現(xiàn)原理

    C++是一種面向對象的編程語言,在C++中,虛函數(shù)是實現(xiàn)多態(tài)性的關鍵。本文就來探討一下C++虛函數(shù)中多態(tài)性的實現(xiàn)原理及其在面向對象編程中的應用吧
    2023-05-05
  • C++數(shù)據(jù)結構之list詳解

    C++數(shù)據(jù)結構之list詳解

    list是一種序列式容器。list容器完成的功能實際上和數(shù)據(jù)結構中的雙向鏈表是極其相似的,list中的數(shù)據(jù)元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的
    2021-11-11
  • C語言安全編碼數(shù)組記法的一致性

    C語言安全編碼數(shù)組記法的一致性

    這篇文章主要介紹了C語言安全編碼數(shù)組記法的一致性,需要的朋友可以參考下
    2014-07-07
  • 關于C++中strcpy函數(shù)例題講解

    關于C++中strcpy函數(shù)例題講解

    在本篇文章里小編給大家整理的是關于C++中strcpy函數(shù)例題講解內(nèi)容,需要的朋友們可以參考下。
    2020-05-05

最新評論

兴城市| 张掖市| 襄垣县| 县级市| 武邑县| 加查县| 平果县| 禹城市| 秦安县| 大冶市| 元朗区| 安溪县| 玛纳斯县| 得荣县| 济南市| 景德镇市| 荔波县| 南岸区| 周宁县| 凤阳县| 玉林市| 鄂温| 彰化县| 定结县| 丹江口市| 巴塘县| 行唐县| 区。| 罗城| 来安县| 莱芜市| 巴彦淖尔市| 韶关市| 南平市| 佛冈县| 盐津县| 东乡县| 哈密市| 石狮市| 礼泉县| 北安市|