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