Hi!歡迎來到指針的世界,也許您早已聽過它的大名,指針被稱為是C語言的精華所在。真正理解和掌握指針是征服C語言的關(guān)鍵所在!
在眾多的計算機語言中,試問:還有哪門語言可以有C語言這樣在作用、速度和安全上平衡得如此優(yōu)異的呢?而指針則在其中扮演了重要的角色!或許有人會說:正是因為指針才使C程序變得非常不安全!而我則想說的是:這就要求C程序員要有更高的駕馭C語言的能力,而這點也恰好反映出C的設(shè)計哲學(xué)!那就是:“C充分相信程序員!”所以:請不要辜負它!
OK,在學(xué)習(xí)指針之前,我們先弄清楚一個概念:
地址
何謂地址?在內(nèi)存(注意:我們這里提到的內(nèi)存并不是人們常說的計算機的物理內(nèi)存,而是虛擬的邏輯內(nèi)存空間)中,簡單地說:地址就是可以唯一標識某一點的一個編號,即一個數(shù)字!我們都見過尺子,我們統(tǒng)一以毫米為單位,一把長1000毫米的尺子,其范圍區(qū)間為0~999,而我們可以準確的找到35毫米、256毫米處的位置。
同樣的道理,內(nèi)存也如此,也是像尺子一樣線性排布,只不過這個范圍略大,在我們最廣泛使用的32位操作系統(tǒng)下,是從0~4,294,967,295之間,而地址就是這之中的的一個編號而已,習(xí)慣上,在計算機里地址我們常常用其對應(yīng)的十六進制數(shù)來表示,比如0x12ff7c這樣。在我們的C程序中,每一個定義的變量,在內(nèi)存中都占有一個內(nèi)存單元,比如int類型占四個字節(jié),char類型占一個字節(jié)等等,每個字節(jié)都在0~4,294,967,295之間都有一個對應(yīng)的編號,C語言允許在程序中使用變量的地址,并可以通過地址運算符"&"得到變量的地址。
#include<stdio.h> int main() { int i; int a[10]={1,2,3,4,5,6,7,8,9,0}; char b[10]={'c','l','a','n','g','u','a','g','e'}; for(i=0;i<10;i++) { printf("int Address:0x%x,Value:%d\n",&a[i],a[i]); } printf("\n"); for(i=0;i<10;i++) { printf("char Address:0x%x,Value :%c\n",&b[i],b[i]); } return 0; }
在32位linux系統(tǒng)下運行參考結(jié)果:
int Address:0xbfb949c4,Value:1 int Address:0xbfb949c8,Value:2 int Address:0xbfb949cc,Value:3 int Address:0xbfb949d0,Value:4 int Address:0xbfb949d4,Value:5 int Address:0xbfb949d8,Value:6 int Address:0xbfb949dc,Value:7 int Address:0xbfb949e0,Value:8 int Address:0xbfb949e4,Value:9 int Address:0xbfb949e8,Value:0 char Address:0xbfb949f2,Value :c char Address:0xbfb949f3,Value :l char Address:0xbfb949f4,Value :a char Address:0xbfb949f5,Value :n char Address:0xbfb949f6,Value :g char Address:0xbfb949f7,Value :u char Address:0xbfb949f8,Value :a char Address:0xbfb949f9,Value :g char Address:0xbfb949fa,Value :e char Address:0xbfb949fb,Value :
請親自上機運行測試,并觀察分析結(jié)果。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程