指標深入分析

2021-08-25 23:36:45 字數 2518 閱讀 5908

指標學習資料(zollty-2009)

1.指向普通變數或者某個數或者字串。例如

int j,a[10];

int *pointer_1,*pointer_2;

pointer_1=&j;

pointer_2=&a[7];

2.指標作為函式引數。例如

(主函式部分)

pointer_1=&a;pointer_2=&b;

if(a

(交換兩數的函式)

void swap(int *p1,int *p2)

swap接受主函式傳來的兩個數a和b的位址,用p1和p2去指代,然後交換p1和p2的內容,則在記憶體上引起了改變,所以原來的a和b所對應的值改變。

3.指向陣列首位址【例1】

對於一維陣列:p=a; 呼叫:*(a+i)或者*(p+i)

對於二維陣列:p=a[0]; 呼叫:*(a[0]+i)或者*(p+i)

4.指向陣列的每行【例2】

形如:int a[3][4];

int (*p)[4]; p=a;

呼叫:*(*(p+i)+j)

5. 指向函式。例如

int max(int x,int y);

n=max(a,b);

可以改作:

int (*p)(int,int);

p=max;

n=p(a,b);

6.返回指標值的函式。例如

int *a(int x,int y);

7.指標陣列。【例3】

它是乙個陣列,例如

int *p[4];

char *name=;

8.指向指標的指標【例4】

形如 char **p;

9.指標的運算

(1)減法:如果兩個指標指向同一陣列,則兩個指標之差為它們之間間隔的元素個數,比如p1指向a[1],p2指向a[4],則p2-p1=3。而p1+p2無意義;

(2)比較,>、<、=,比較的是同一陣列中的元素的先後順序;

(3)賦值,同型別的指標才能相互賦值,若p1為int型,p2為float型,則可以強制轉換p1=(int *)p2;

(4)可以令p=null,即使指標指向位址為0的單元,因為指標在未賦值以前指向的是乙個未知的位址,這是非常危險的,所以不妨在引用它以前就把null賦值給它。

【例】

1.普通指標指向多維陣列

#include

using namespace std;

int main() ;

int *p;

for(p=a[0];p

cout<<*p++<<" ";

cout<

return 0; }

2.行指標指向多位陣列

形如(*p)[10],用法為*(*(p+i)+j)

#include

using namespace std;

int main() ;

int (*p)[4],i,j;

cin>>i>>j;

p=a; //a代表的是陣列第一行的首位址.

cout<<*(*(p+i)+j)<

return 0; }

3.用來裝字串的陣列

方法一:(指標法)

#include

using namespace std;

int main() ;

cout<

return 0;

注意:輸出的時候用的是name[0]而不是name或者*name[0],後面(例4)將說明原因。 }

方法二:(字元陣列法)

#include

using namespace std;

int main() ;

cout<

return 0; }

注意:方法二不適合類似於int a[2][3]=,};的陣列(此時若想輸出a[0]則是錯誤的做法)。

方法三:(字串陣列法)

#include

#include

using namespace std;

int main() ;

cout<

return 0; }

4. #include

using namespace std;

int main() ;

p=name+2;

cout<<*p<

cout<<**p<

return 0; }

分析:*p=name[2]= "c++"的首位址,(通常所說乙個字串的「位址」實際上指的是它的「首位址」或者「起始位址」),用cout 輸出的不是字串的首位址而是整個字串(只要把乙個字串的起始位址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),

為了證明這一點,請看:string a=「finish」;cout<

例4,第乙個*p輸出"c++",第二個**p代表"c++"首位址的內容,即c。

C語言指標深入分析

指標是c語言的精髓,也是c語言的難點,一起加油鴨!參考c語言指標詳解 經典,非常詳細 指標本質上就是乙個位址,占用的儲存空間固定,一般為四個位元組。很重要的一點是指標指向的只是資料的首位址,那麼計算機如何知道這個資料具體有多長呢?答案是通過指標的型別來確定。換句話說,指標的型別的作用就是告訴計算機取...

深入分析C 引用 指標常量

引言 我選擇寫 c 中的引用是因為我感覺大多數人誤解了引用。而我之所以有這個感受是因為我主持過很多 c 的面試,並且我很少從面試者中得到關於 c 引用的正確答案。那麼 c 中引用到底意味這什麼呢?通常乙個引用讓人想到是變數的別名,而我討厭將 c 中引用定義為變數的別名。這篇文章中,我將盡量解釋清楚,...

IsPostBack深入分析

1 ispostback 介紹 ispostback是 page類有乙個 bool型別的屬性,用來判斷針對當前 form的請求是第一次還是非第一次請求。當 ispostback true時表示非第一次請求,我們稱為 postback,當 ispostback false時表示第一次請求。在 asp....