C語言指針學多了,為什么你會暈乎乎的?
來源:程序員人生 發布時間:2017-02-20 09:41:38 閱讀次數:3519次
對C語言中的指針概念,如果我告知你,它是1個地址變量,你聽了1頭霧水,“地址?啥意思?”見你不理解,我說的詳細點“指針變量跟其他變量1樣,存儲的是1個地址”。你想了想,“跟其他變量1樣?其他變量寄存的是數值,變量有地址....指針變量寄存的是地址,地址里有個值.....”你又暈掉了!沒辦法,我找了專業教材,找到教材上對指針的定義“指針是1個變量,存儲的另外一個變量的地址,也就是另外一個變量所在的內存位置的首地址。”你轉了轉大眼睛,依然1頭懵逼!
好吧,看來傳統的解釋會讓你1直暈下去,那我不解釋了,本篇文章我不解釋甚么叫指針了,我就重點說下為何指針會讓你暈,指出讓你暈的根本緣由,或許你知道了就不暈了呢?
我們先來看1個很簡單的變量定義:
int a = 1;
a是1個整型變量,它的值是1,對這么簡單的1個變量,你鐵定地絕對地1定地不會暈,a就是1,1就是a嘛,簡單、清晰、明了!
畫個圖來看下:
好了,下面我們再定義1個指針變量p:
#include "stdio.h"
#include "stdlib.h"
int main()
{
int *p = NULL;
p = (int *) malloc (sizeof(int)); //為指針變量p申請1段內存地址
printf("指針p的值是%x\n", p);
*p = 2;//上述申請的內存地址寄存的數值是2
printf("指針p指向的值是%d\n", *p);
free(p);
p = NULL;
return 0;
}
我們先看下運行結果:
p的值是“380fe0”,指向的值是2。你看到這個后,你會想“剛才變量a和1好理解,a就是1,1就是a。現在有p,380fe0,23個東東,p就是380fe0?那p跟2是啥關系?380fe0跟2又是啥關系?對了,好像還有個*p這個東東,又是甚么關系?完了,我暈了!!”現在我可以指出,在理論上,你指針學多了暈的根本緣由就在以下兩點:
1.有4個東西:p,*p,380fe0和2,比剛才的a和1硬生生多了兩個東西,使得你大腦思考時多了兩個需要思考的對象,增加了你大腦思考的負擔;
2.這4個東西:p,*p,380fe0和2中,只有p、*p、2會被程序代碼所使用,380fe01般用不到,但是你又必須時時刻刻記著這個380fe0,又再次增加你大腦思考的負擔;
好了,我再用1張圖來形象地解釋你會暈的緣由:

與a和1的那張圖對照,形象上來講你指針學多了暈的根本緣由又在以下3點:
1.你傳統思惟是a就是1,1就是a。但在指針變量來看,p就不是2,2也不是p了。p是啥?p就是380fe0,380fe0就是p。注意,你的傳統思惟開始第1次被顛覆,接著看:
2.那誰就是2,2就是誰呢?答案就在于*p就是2,2就是*p。出現了*p,你的傳統思惟第2次被顛覆,哈哈;
3.那p和*p啥關系?二者長的好像啊,就是多了1個*的區分。你的傳統思惟開始第3次被顛覆。到這里,你基本上已暈了;
那末,在學指針,用指針時,如何做到不暈呢?除好好多學習多思考外,我教你3招:
1.看到指針變量時,立即拋棄你的a就是1,1就是a的傳統思惟,開始想到p,*p,380fe0和2這4個東東,不然你會思考的很痛苦;
2.牢記p與380fe0是1家,*p與2是1家;
3.記住p與2是遠方親戚,p與2要通過*p來聯系;*p與380fe0是遠方親戚,*p脫掉*就和380fe0是1家了。
這篇文章主要是分析指針學習讓你頭暈的緣由,文字表述可能其實不嚴謹,請見諒!
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈