C語言雜談 指標篇

2021-09-22 07:27:36 字數 1561 閱讀 4400

指標是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 是理解物件導向語言中引用的...