指標的一些見解

2021-10-08 08:02:19 字數 1728 閱讀 5549

在c、c++,最牛皮也是最令人頭疼的就是指標了,記得那時是乙個炎熱的下午,老師吐出了那兩個讓我畢生難忘的字:指標(然後太熱了睡著了)。還記得當時,老師就提醒我們指標是c強大的重要部分,但同時如果處理不好,問題也很大。

但其實吧,學習指標的壓力也不是那麼大的。(自行補圖)

typename * pointname;

如int * a;

a儲存的是乙個位址,而* a則儲存乙個int型的變數

重要的是a儲存的位址,而不是 *a的內容,因為位址確定的內容也是確定的。

所以,下列**是有問題的:

int

*a;a =

233;

這裡的a儲存啥位址?不知道。

不知道指標指向**就是風險!,所以指標在建立的時候要初始化一下。

如果建立指標之後沒有初始化目標,就初始化為null;null可以理解為0位址,但又有所不同。

還有乙個令人迷惑的行為,int *a=null;前面說了 *a應當是乙個int型,但為什麼賦值為乙個位址?

其實這個過程是給a賦值的過程,而不是給 *a這個整體。

開始了,開始了,c的乙個難點。

int a[10]=;

int * p=a;//眾所周知,a不但是陣列名同時也是a的位址

所以輸出a的方式:直接a或者 * p;

如果是輸出a,方法也有很多:

a[

1]、*(++p)、*(p+

1)、p[

1]

沒錯,p可以直接當成陣列名使用,不論是主函式還是其他函式內。

這裡面的p+1要提一下,是加一之後解引用(就是加星號的標準說法),所以加一對應的是位址加乙個,

是加乙個int位址的長度,所以到達了a[1]的座標,才會輸出a[1]的。

這裡的字串是指char陣列,而不是c++的string類。

char color[10]

="blue"

;printf

("my lucky color is %s"

,color)

;

正常應該是輸出blue。

看起來尋常不過,但是之前提過color是color[0]的位址,但是他直接就輸出了整個字串。

所以下面的**也是成立的。

char

*p="name"

;//這裡的name是這個字串的位址

按上面的來,那麼(int *)p應該是什麼? 是name這個字串的位址

struct link

沒錯,還是鍊錶。

struct link head如果想呼叫data,需要的是成員運算子 『.』

但是如果是乙個指標struct link* head,他的data成員應該是(*head).data//加括號是因為優先順序的原因。

很麻煩,所以出現了箭頭運算子head->data。

說到鍊錶不得不提的問題就是在插入刪除時如果控制不好,會造成斷鏈,就是前乙個指標不知道指向**或者是指向乙個被釋放的空間、甚至是head沒有初始化,這些都很危險!

而邊界條件這些更是新手學習鍊錶的大坑。

總之指標的建議就是要多練習,聽懂和能用還是差了很多,犯錯什麼的都很正常。

C語言指標概念的一些見解

一級的指標 首先說一下指標的概念 拿int p來說,就是定義乙個指標,p指向一段記憶體空間,p的值為這塊記憶體空間的位址,這塊空間裡面存的是int型別的空間,也就是從位址的位置開始的四個位元組的記憶體上會存放int 型別的資料,而p的值永遠是位址,並且這個位址不會改變,使用p就可以訪問這塊記憶體空間...

CSRF XSS Cookies 的一些見解

csrf 攻擊 在瀏覽器中插入了 惡意鏈結 並在使用者訪問之時讓使用者訪問,達到使用使用者的cooikes達到連線指定伺服器客戶的的驗證資訊,並進行一些簡單的操作。比如 防禦 最簡單的,可以通過驗證cookies進行一些防禦。例如在使用者操作驗證中,判斷是否又cookies傳過來,如果沒有則是惡意鏈...

單鏈表的一些見解

關於q next p next和q p next的理解 假令 q為結點1,p為結點2,即q的物理儲存位址為00293590,q中指標域中儲存位址為00293558,q中資料域為11 即p的物理儲存位址為00293558,q中指標域中儲存位址為00293448,q中資料域為12 q next p ne...