成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

野指針就像野狗嗎(指針詳解1)

zebrayoung / 1198人閱讀

摘要:我們平時說指針,也可以指指針變量。是指針變量這段表達(dá)式的意思是定義了一個指針變量,里面存放的是的地址。叫做指針類型就叫做指針變量指針類型又是什么既然變量有不同的類型,比如整型,浮點型等。


?? :熱愛編程學(xué)習(xí),期待一起交流!
?:博主水平有限,如有發(fā)現(xiàn)錯誤,求告知,多謝!

前言

  • 以下是博主對近期指針的拙見,如有錯誤,請指教。(感謝萬分!)
  • 博主最近初學(xué)了指針,感覺到了指針的魅力
    !指針就是C語言的精髓啊,感覺指針太厲害了。學(xué)會了一些指針的知識真的是感到成就感爆棚,并且感受到了指針的神奇。
  • 但指針并不可怕,指針只是比較抽象而已。理解的話很簡單。你只要記住我下面說的就行了。相信博主,你肯定能學(xué)懂指針。

指針是什么?

  • 指針只是一個名詞而已,指針就是地址。
  • 我們平時說指針,也可以指指針變量。

怎么表示?

類型名  指針變量 = 地址;例如:int* pa = &a;//我們這里的指針類型叫做int*,我讀做(yin te 星號)。//pa是指針變量
  • 這段表達(dá)式的意思是:定義了一個指針變量pa,里面存放的是a的地址。而這個指針變量的類型為int*。
  • 那下面就有同學(xué)疑惑了,那什么是指針變量?

什么是指針變量?

  • 很簡單,在之前我們學(xué)習(xí)了怎么定義整型變量a。
  • 比如定義一個《整型》《變量a》,然后把a(bǔ)初始化為10。
int a = 10
  • 不過現(xiàn)在變了,我們現(xiàn)在學(xué)習(xí)了指針。
  • 可以定義一個《int*》《變量pa》,然后把pa初識化為&a。
  • 注意:
  • int* 是一個類型。叫做指針類型
  • pa就叫做指針變量
int* pa = &a;

指針類型又是什么?

  • 既然變量有不同的類型,比如整型,浮點型等。
  • 那么指針也有也有不同的類型。
char  *pc = NULL;int   *pi = NULL;short *ps = NULL;long  *pl = NULL;float *pf = NULL;double *pd = NULL;//NULL為空指針。
  • 這里可以看到,指針的定義方式是:類型 + * 。
    其實:
  • char* 類型的指針是為了存放 char 類型變量的地址。
  • short* 類型的指針是為了存放 short 類型變量的地址。
  • int* 類型的指針是為了存放 int 類型變量的地址。

指針類型存在的意義

  • 那有這么多的指針的類型,指針類型的意義是什么?
  • 我們在這里先說兩個重要結(jié)論:
  • 指針的類型決定了指針向前或者向后走一步(也就是地址+1)有多大(能走多少個字節(jié))
  • 指針的類型決定了,對指針解引用的時候有多大的權(quán)限(能操作幾個字節(jié))。
  • 比如: char* 的指針+1(也就是地址加一)只能跳過一個字節(jié),而 int* 的指針+1(地址+1)就能跳過四個字節(jié)。
  • 因為char類型在內(nèi)存中占1個字節(jié),int類型在內(nèi)存中占4個字節(jié)。
  • 再比如: char* 的指針解引用就只能訪問一個字節(jié),而 int* 的指針的解引用就能訪問四個字節(jié)。
  • 也不能空談,我們看下面的例子
int main(){	int n = 10;//定義整型變量n,初始化為10	char* pc = (char*)&n;//定義字符類型指針變量pc,初始化為n的地址	int* pi = &n;//定義整型指針變量pi,初始化為n的地址	printf("%p/n", &n);	printf("%p/n", pc);	printf("%p/n", pc + 1);	printf("%p/n", pi);	printf("%p/n", pi + 1);	return 0;}
  • 打印結(jié)果如下,為16進(jìn)制的數(shù)字。
  • 可以看出來字符類型的指針變量pc加1,只能操作一個字節(jié),所以從4+1變到5。
  • 而整型變量pi+1跳過了4個字節(jié),變?yōu)榱?。

    綜上所述,這就是指針類型的意義。

野指針是什么?

  • 聽到野指針可能有人會疑惑這個名詞什么意思啊?
  • 不要著急,野指針很好理解。

對一個狗形容為野的話,可以理解為這個野狗經(jīng)常占別人的地盤,或者隨機(jī)出現(xiàn)在任何地方

  • 所以野指針也是這個意思呀。
  • 野指針就是總是占別人內(nèi)存(地址)的指針?;蛘唠S機(jī)出現(xiàn)一個地址。

野指針產(chǎn)生的原因

一、 指針未初始化

int main(){  int *p;//局部變量指針未初始化,默認(rèn)為隨機(jī)值    *p = 20; return 0; }

二、 指針越界訪問

#include <stdio.h>int main(){    int arr[10] = {0};    int *p = arr;    int i = 0;    for(i=0; i<=11; i++)   {        //當(dāng)指針指向的范圍超出數(shù)組arr的范圍時,p就是野指針        *(p++) = i;   }    return 0; }

如何避免野指針(野狗)的出現(xiàn)呢?

  1. 指針初始化(就是把野狗栓到一個地方,不讓他隨便占別人的地盤)
  2. 小心指針越界(把野狗拴好,避免掙脫繩子)

指針運算

  • 指針減指針,得到是兩個指針之間的元素個數(shù)。

總結(jié)

  • 今天博主(11月23日 1:25分)就先分享到這里了。小命要緊,明天還要早起上課。
  • 如果你覺得我的文章對你有幫助?歡迎關(guān)注?點贊?收藏??留言?。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/124784.html

相關(guān)文章

  • 五分鐘殺穿指針 pointer——C語言專題

    摘要:另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是語言的精髓。野指針成因除了未初始化還有就是越界訪問或者指針指向空間已經(jīng)釋放。所以不難知道兩個地址相減就是元素的個數(shù),這個表達(dá)式的前提是兩個指針指向同一塊空間。 ...

    MycLambert 評論0 收藏0
  • [C/C++ -STL]vector使用及迭代器失效問題詳解

    摘要:函數(shù)底層實際上是對指針的操作隸書向,范圍內(nèi)比較等于的第一個元素返回迭代器。指定位置元素的刪除操作使用查找所在位置的刪除位置的數(shù)據(jù),導(dǎo)致迭代器失效。因此刪除中任意位置上元素時,就認(rèn)為該位置迭代器失效了。 ...

    VishKozus 評論0 收藏0
  • 【C語言】從入門到入土(指針篇)

    摘要:在位機(jī)器上,如果有個地址線,那一個指針變量的大小是個字節(jié),才能存放一個地址。就是一個指針變量,也有自己的類型,指針變量的類型我們可以發(fā)現(xiàn)指針的定義方式是類型星號。也就是說存儲什么變量類型就用什么指針變量類型。 ...

    陳偉 評論0 收藏0
  • C語言指針這一篇夠了(一萬二千字,包含指針與數(shù)組,函數(shù)指針詳解

    摘要:指針變量可以存放基本類型數(shù)據(jù)的地址,也可以存放數(shù)組函數(shù)以及其他指針變量的地址。數(shù)組名表示的是整個數(shù)組所占的字節(jié)數(shù)。在這里數(shù)組指針的類型是。這也是我們可以用數(shù)組指針來接收二維數(shù)組數(shù)組名的原因。 目錄 零.前言 一.指針的定義 二.指針類型的意義 1.指針類型決定了指針解引用時一次訪問幾個字...

    My_Oh_My 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<