指標是c語言的難點,其原因是它擁有多重的含義。這給已熟練理解c語言指標精髓的程式設計師帶來的好處是,可以天馬行空的構建軟體。但很不幸,我不是那些能夠熟練理解並天馬行空利用c指標的一員。對於我來說,是不是指標只有置之高閣了呢?答案是否定的,我們前面說過「c指標成為難點的原因是因為它擁有多重含義」。這讓我想到了doug mcilroy的一句話:「write programs that do one thing and do it well.」。如果你了解unix,那麼這句話你一定不會陌生。這就是doug mcilroy告訴我們unix哲學中的第一條。為什麼在這裡提到這句話呢?「寫程式,做一件事並做好它。」這同樣適用於c指標。下面我把為自己定製的規矩羅列如下:
1)資料型別和*同時出現,作為指標資料型別,指標資料型別用來申明位址變數.
2)*單獨出現,用作指向符,表示一種運算。
(一)指標和簡單資料型別
intvar;
int*pvar;
//宣告乙個位址變數pvar
pvar = &var; //位址變數當然儲存位址了
(當然,像很多書中說的int *pvar;有三層含義還是要知道的,這裡只是為了清晰思路強調重點,在第一感官上產生這種認識。停下後,會想到該指標指向的內容是int型等等。)
這樣再去理解下面傳遞指標引數的示例是不是通透了?
示例1:
intmyadd(
int*num1,
int*num2)
main()
(二)指標與陣列
1)一維陣列:
p[i] ≡ *(p+i);
2)二維陣列:
p[i][j] ≡ *(p[i]+j) ≡ *(*(p+i)+j);
(三)指標和結構體
struct
add
; struct
add var;
struct
add *pvar; pvar = &var;
var.num1 = 10;
var.num2 = 5;
var.sum = var.num1 + var.num2;
則:
即:pvar->num1 ≡ var.num1
pvar->num2 ≡ var.num2
pvar->sum ≡ var.sum
(四)指標與函式
intadd(
intx,
inty)
intmain()
這裡myadd就是指向add()函式的指標了。指令myadd(num1,num2)呼叫add()函式,並把引數num1、num2傳遞給它。
myadd(num1,num2)和(*myadd)(num1,num2)的意義是一樣的,但為了和自己定的規則一致提倡用myadd(num1,num2)。
韓兆新出處:
分類:
[03]c語言雜談
標籤:
c語言雜談
C語言雜談 指標篇
指標是c語言的難點,其原因是它擁有多重的含義。這給已熟練理解c語言指標精髓的程式設計師帶來的好處是,可以天馬行空的構建軟體。但很不幸,我不是那些能夠熟練理解並天馬行空利用c指標的一員。對於我來說,是不是指標只有置之高閣了呢?答案是否定的,我們前面說過 c指標成為難點的原因是因為它擁有多重含義 這讓我...
C 雜談 C 指標
1.何為指標 程式執行時,任何變數都是存放在記憶體中的,通過將記憶體以位元組的大小劃分,為每個位元組增添索引,某一變數的位址就是該變數在記憶體中所佔的第乙個位元組的索引。此時,定義一變數用來存放開始第乙個位元組的索引,這個變數就被稱為指標,通過該變數的值可以間接的訪問該指標所指向的變數。在32位系統...
C語言篇 指標(一)
指標就是位址,位址就是指標,指標變數就是存放記憶體單元編號的變數。1 基本型別的指標 2 指標和陣列 3 指標和函式 4 指標和結構體 5 多級指標 1 表示一些複雜的資料結構 2 快速的傳遞資料 3 使函式返回乙個以上的值 4 能直接訪問硬體 5 能夠方便的處理字串 6 是理解物件導向語言中引用的...