摘要:文章目錄前言一丶野指針指針的運算指針整數(shù)指針指針指針的關(guān)系運算二字符指針三指針數(shù)組與數(shù)組指針指針數(shù)組數(shù)組指針?biāo)臄?shù)組名與數(shù)組名五數(shù)組參數(shù)指針參數(shù)一維數(shù)組傳參二維數(shù)組傳參一級指針傳參二級指針傳參六丶函數(shù)指針函數(shù)指針即指
我自己前段時間一直在學(xué)習(xí)指針方面相關(guān)內(nèi)容,個人覺得對于像我這樣的初學(xué)者來說,學(xué)到指針這里就感覺到相對比較困難了,所以呢,在學(xué)完指針之后,特此做一個指針方面的知識匯總,以及一些易錯點,如果有不完善的地方,還望大家多多指正。
我們先來說一個指針中容易犯的錯誤,什么叫野指針呢?
野指針就是說指針指向的位置不可知,常見的造成野指針的原因有以下三點
1.int* p; 未對指針初始化,如果我們不知道地址,那我們寫成int*p=NULL;即可
2.指針越界訪問
3.指針指向的空間釋放
指針±整數(shù),就是訪問地址是時跳過幾個元素,大家可以看看這個代碼感受一下。
指針-指針:指的是同一塊空間里指針與指針之間元素的個數(shù)
指針的關(guān)系運算,簡單的就可以理解為指針?biāo)赶蚰莻€空間所對應(yīng)指的大小運算
???????????????
?
字符指針這里比較簡單,就比如char* 就是一個字符指針,在這里我就給大家分享一道例題
?
在這里,第一個if語句,執(zhí)行的是else,if里的str1 與str2分別指的是數(shù)組首元素地址,雖然數(shù)值相同,但地址是不同,大家可以注意一下;第二個if,*str1,*str2,解引用操作就指的是數(shù)組第一個元素,都是h,所以這時候就是相等的。希望這題能對大家有幫助。
?
指針數(shù)組的本質(zhì)上是一個存放指針的數(shù)組
數(shù)組指針的本質(zhì)上指向數(shù)組的指針。
int* p=NULL;//p是整形指針——指向整形的指針——存放整形的地址char* pc=NULL;//pc是字符指針——指向字符的指針——存放字符的地址//那么數(shù)組指針就是——指向數(shù)組的指針——存放數(shù)組的地址
那么問題來了,這樣一個數(shù)組指針該怎么表示呢?
int arr【10】 ={0};int* p【10】 =&arr;//是這樣嗎?應(yīng)該不是,【】的優(yōu)先級高于*,所以這樣就是一個存放指針的數(shù)組了,即指針數(shù)組int(*p)【10】=&arr;//這樣就合理了,首先可以知道他是一個指針,然后指向的是一個數(shù)組,所以是存放數(shù)組的地址,即數(shù)組指針
那我們再看一個例子,char* arr【5】;
這個數(shù)組指針又該怎么表示呢?________=&arr;
想
到
答
案
了
嗎
?
正確答案是: char*((*pa)【5】)=&arr;
那為什么呢?下面用一副圖給大家解釋一下
最后我們再來整理一下數(shù)組指針和指針數(shù)組
多帶帶的數(shù)組名,就是首元素的地址
arr 與 &arr【0】表示的意義是一樣的,都是首元素地址
有兩種例外,數(shù)組名不多帶帶表示數(shù)組首元素地址
1.我們計算字符串長度的時候
int sz=sizeof(arr)/sizeof(arr【0】);//這里 arr就表示的是整個數(shù)組
2.&arr,&arr表示的是取整個數(shù)組的地址,而不單單是一個元素的地址
3.&arr+1 跳過的是整個數(shù)組;arr+1 跳過的一個元素
像上面的傳參形式都是正確的,一維數(shù)組傳參,可以直接用數(shù)組來接收,也可用指針來接收,因為傳參傳的就是首元素地址;像test2 指針數(shù)組傳參,原理是一樣的 可以直接用指針數(shù)組接收,要注意的是用指針進行接收時要用二級指針,因為指針數(shù)組里的元素本來就是地址,現(xiàn)在傳首元素的地址,可以理解為傳地址的地址,所以應(yīng)該用二級指針接收。
在函數(shù)里: &函數(shù)名 與 函數(shù)名 都指的是函數(shù)的地址
比如一個加法 函數(shù)
int Add (int x,int y)int (*p)(int ,int)=Add;//它寫為指針的形式就是這樣,交代清楚返回類型,(*p)保證它為指針
但是在調(diào)運函數(shù)指針時,* 或者不解引用都可以,比如說:
print(“%d”,p(2,3);//p里存的就是Add的地址 相當(dāng)于Add(2,3)print(“%d”,(*p)(2,3)//這倆個結(jié)果都是相同的
通過上面的介紹,我們就知道,這個函數(shù)指針數(shù)組呢,它是一個存放函數(shù)指針的數(shù)組,數(shù)組里存放的是每一個函數(shù)的地址,根據(jù)這個概念呢,我突發(fā)奇想,做了個加減乘除的計算器,數(shù)組里放了每個函數(shù),有些不足也希望大家可以指正,代碼如下:
當(dāng)時看到這個的時候已經(jīng)崩潰了,指針就是無限套娃又套娃嗎????。?!
我們可以根據(jù)這個代碼理解一下指向函數(shù)指針數(shù)組的指針,就是套娃再套娃!
自己目前學(xué)習(xí)關(guān)于指針的內(nèi)容總結(jié)出來就是這些啦,有不足和紕漏的地方歡迎大家多多指正,都看到這里了,點個贊再走吧,謝謝大家.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/123077.html
此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當(dāng)然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...
摘要:與比較中與比較關(guān)鍵字用來在函數(shù)或其他局部作用域中使用全局變量。親自動手試后,發(fā)現(xiàn)使用了只會讀閉包內(nèi)的變量,可以隔著多層上一哥們類比看作為步驟 這篇文章是抄抄寫寫得來的,純粹是這個編輯器比筆記的好太多,才在這兒寫。 函數(shù)參數(shù)傳遞 Python的函數(shù)參數(shù)傳遞 對于變量(與對象相對的概念),其實,python函數(shù)參數(shù)傳遞可以理解為就是變量傳值操作,用C++的方式理解,就是對void*賦值。如...
摘要:此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn)當(dāng)然也會加上我對導(dǎo)圖的詳解目的是為了更方便快捷的記憶和回憶算法重點不用每次都重復(fù)看題解畢竟算法不是做了一遍就能完全記住的所 ...
摘要:最近手頭上做了一個很大的后臺管理項目,前端對復(fù)雜數(shù)據(jù)的處理要求頗高,也確實讓自己發(fā)現(xiàn)了很多之前被忽視的細節(jié)。鳴人佐助卡卡西佐助佐助佐助但是很遺憾及更早版本也不支持。 ??最近手頭上做了一個很大的后臺管理項目,前端對復(fù)雜數(shù)據(jù)的處理要求頗高,也確實讓自己發(fā)現(xiàn)了很多之前被忽視的細節(jié)。在此特整理出來,希望不熟悉的朋友們們以后可以繞開我踩的這些坑。本文初衷在于幫助大家梳理一些數(shù)組操作上的重點和易...
摘要:針對于面向?qū)ο缶幊痰?。因為面向?qū)ο缶褪轻槍ο罄又械氖睾騺磉M行執(zhí)行某些動作。這就是閉包的用途之一延續(xù)變量周期。把變量放在閉包里面和放在全局變量里面,影響是一致的。 1.前言 這段時間,金三銀四,很多人面試,很多人分享面試題。在前段時間,我也臨時擔(dān)任面試官,為了大概了解面試者的水平,我也寫了一份題目,面試了幾個前端開發(fā)者。在這段時間里面,我在學(xué),在寫設(shè)計模式的一些知識,想不到的設(shè)計模式...
閱讀 1116·2023-04-26 03:02
閱讀 1161·2023-04-25 19:18
閱讀 2582·2021-11-23 09:51
閱讀 2561·2021-11-11 16:55
閱讀 2612·2021-10-21 09:39
閱讀 1693·2021-10-09 09:59
閱讀 1990·2021-09-26 09:55
閱讀 3512·2021-09-26 09:55