對於c語言中的指標概念,如果我告訴你,它是乙個位址變數,你聽了一頭霧水,「位址?啥意思?」見你不理解,我說的詳細點「指標變數跟其他變數一樣,儲存的是乙個位址」。你想了想,「跟其他變數一樣?其他變數存放的是數值,變數有位址....指標變數存放的是位址,位址裡有個值.....」你又暈掉了!沒辦法,我找了專業教材,找到教材上對指標的定義「指標是乙個變數,儲存的另乙個變數的位址,也就是另乙個變數所在的記憶體位置的首位址。」你轉了轉大眼睛,仍然一頭懵逼!
好吧,看來傳統的解釋會讓你一直暈下去,那我不解釋了,本篇文章我不解釋什麼叫指標了,我就重點說下為什麼指標會讓你暈,指出讓你暈的根本原因,也許你知道了就不暈了呢?
我們先來看乙個很簡單的變數定義:
int a = 1;
a是乙個整型變數,它的值是1,對於這麼簡單的乙個變數,你鐵定地絕對地一定地不會暈,a就是1,1就是a嘛,簡單、清晰、明了!
畫個圖來看下:
好了,下面我們再定義乙個指標變數p:
[cpp]view plain
copy
#include "stdio.h"
#include "stdlib.h"
intmain()
我們先看下執行結果:
p的值是「380fe0」,指向的值是2。你看到這個後,你會想「剛才變數a和1好理解,a就是1,1就是a。現在有p,380fe0,2三個東東,p就是380fe0?那p跟2是啥關係?380fe0跟2又是啥關係?對了,好像還有個*p這個東東,又是什麼關係?完了,我暈了!!」現在我可以指出,在理論上,你指標學多了暈的根本原因就在如下兩點:
1.有四個東西:p,*p,380fe0和2,比剛才的a和1硬生生多了兩個東西,使得你大腦思考時多了兩個需要思考的物件,增加了你大腦思考的負擔;
2.這四個東西:p,*p,380fe0和2中,只有p、*p、2會被程式**所使用,380fe0一般用不到,但是你又必須時時刻刻記著這個380fe0,又再次增加你大腦思考的負擔;
好了,我再用一張圖來形象地解釋你會暈的原因:
與a和1的那張圖對比,形象上來說你指標學多了暈的根本原因又在如下3點:
1.你傳統思維是a就是1,1就是a。但在指標變數來看,p就不是2,2也不是p了。p是啥?p就是380fe0,380fe0就是p。注意,你的傳統思維開始第一次被顛覆,接著看:
2.那誰就是2,2就是誰呢?答案就在於*p就是2,2就是*p。出現了*p,你的傳統思維第二次被顛覆,哈哈;
3.那p和*p啥關係?兩者長的好像啊,就是多了乙個*的區別。你的傳統思維開始第三次被顛覆。到這裡,你基本上已經暈了;
那麼,在學指標,用指標時,如何做到不暈呢?除了好好多學習多思考外,我教你三招:
1.看到指標變數時,立即拋棄你的a就是1,1就是a的傳統思維,開始想到p,*p,380fe0和2這四個東東,不然你會思考的很痛苦;
2.牢記p與380fe0是一家,*p與2是一家;
3.記住p與2是遠方親戚,p與2要通過*p來聯絡;*p與380fe0是遠方親戚,*p脫掉*就和380fe0是一家了。
這篇文章主要是分析指標學習讓你頭暈的原因,文字表述可能並不嚴謹,請見諒!
C語言指標學多了,你為什麼會覺得暈?
對於c語言中的指標概念,如果我告訴你,它是乙個位址變數,你聽了一頭霧水,位址?啥意思?見你不理解,我說的詳細點 指標變數跟其他變數一樣,儲存的是乙個位址 你想了想,跟其他變數一樣?其他變數存放的是數值,變數有位址.指標變數存放的是位址,位址裡有個值.你又暈掉了!沒辦法,我找了專業教材,找到教材上對指...
C語言基礎 指標(二)為什麼用指標
int a 2 int b int 0x0060feec b 20 printf a的位址 p na的內容 d n a,a printf b的位址 p nb的內容 d n 用途 arm裸機程式設計 arm驅動程式設計 volatile int b int 0x0060feec volatile 簡易...
C語言學習筆記 指標(二)為什麼使用指標?
為什麼要使用指標 我們首先引入乙個例子 include include intmain a的位址是系統隨機分配的那麼我們如果想要把資料儲存在指定位址呢?include include intmain 另外假若我們通過編寫乙個函式要交換兩個資料 include include void swap in...