C 學習日記14 指標的概念 用法及例項

2021-07-24 21:23:04 字數 2846 閱讀 4594

在c/c++中,指標的理解和使用是衡量你對該語言的掌握程度,加油不拋棄不放棄~

一、指標的概念

記憶體——由記憶體單元構成,每個記憶體單元都有專屬的位址,其是記憶體單元的編號;記憶體單元的內容——存放在記憶體單元的資料

在c/c++語言中,每個變數都分配由確定的記憶體空間。使用變數名可直接訪問記憶體中的資料;通過變數的位址也可間接訪問記憶體中的資料

特點:

1、指標本身就是乙個物件

2、指標無須在定義時就賦初值

定義指標的方法:

型別+宣告符,此處將宣告符寫成*d的形式,其中d是指標變數名,如int *p; char *ptr ,*ptr1;

注:*為解引用符;&為取址符

二、位址與指標

定義乙個變數,系統按變數型別為變數分配不同數目的記憶體單元,將其第乙個記憶體單元的位址作為變數的位址。如int a;

在c/c++中,允許定義一種特殊變數,用於存放某變數的位址,這種特殊變數即為指標。如int *p=&a; 表示為p->a,讀作p指向a,即p存放的是指向a的指標,p為指標變數

結論:存放「位址」的變數稱為指標變數,這裡的「位址」就是指標,因此變數的位址就是變數的指標。

注:1、引用不是物件,沒有實際位址,所以不能定義指向引用的指標。如int a;  int &b=a;  int *p=b;//這第三條語句出錯

2、一般地,指標的型別要和它所指向的物件嚴格匹配,不過也有特殊情況(出現頻率較少)。

三、指標型別的主要用途

1、引數傳遞:指標作引數可實現引數按引用傳遞的功能——比如形參改變實參。

2、動態分配:利用動態分配構建動態陣列,動態陣列需要借助指標實現。

3、資料結構:建立可伸縮的資料結構,如鍊表、棧與佇列、樹和圖等。

4、多型處理:物件導向程式設計中「執行多型性」的處理是利用指標與引用實現的。

四、指標和變數的關係

變數與指標變數

變數有位址,指標變數可以存放變數的位址

當指標變數中存放某個變數的位址後,可以說該指標變數指向這個變數

使用指標變數的三個步驟

1、定義指標變數(即給指標變數分配記憶體空間)

資料型別 *變數名如:int *a;//a是乙個整型指標變數  char *p;//p是乙個字元型指標變數 

2、指標變數的初始化(即指標變數指向某物件)

為指標變數提供初值   如int a=5,*p=&a;  <=>int a=5; int *p=&a;//p的初值為a的位址

注:此處不可寫成*p=&a,只能是p=&a;因為*p並不是表示指標變數,而是指標變數指向的變數a

3、通過指標變數間接訪問所指向的物件

指標型別中,有兩個特殊的單目運算子: &和*

(1)&——取位址運算子

(2)*——取值運算子

上述步驟1和2可以合併

五、函式與指標

乙個函式在編譯時被分配乙個入口位址,這個入口位址就稱為函式的指標,在c++中,函式名代表函式的入口位址。

1、指標作函式的引數——實現位址傳遞(間接傳遞),與引用作引數效果相同

2、返回指標的函式

定義格式如下:

型別 * 函式名(形式參數列)

上述,型別 *  ——為函式的返回值型別,是乙個指標型別

3、指向函式的指標變數

使用指向函式的指標變數可以存放函式的指標。

定義格式如下:

函式返回值型別 (* 指標變數名)(形參型別表列)

注:上述兩個括號不可以缺少

如:double (*pf)(double);

pf=sqrt;//pf指向乙個平方根函式

這時,利用*pf呼叫該函式

如:cout<<(*pf)(2.0)六、例項分析

例項1:三個數排序——指標作為函式的形參

功能:輸入三個整數,排成從小到大的順序並輸出

//對三個數排序,假設從小到大

//#include

using namespace std;

void swap(int *i, int *j)

int main()

小結: 形參(自定義函式)<--實參位址(主調函式)

實參(主調函式)<--形參的值(自定義函式)

例項2:去掉字串首部的空格——返回指標的函式

//編寫程式,返回字串中首次出現的非空格字元開始的字串。

#include

using namespace std;

//返回字元指標的函式

char *noblank(char s)

s[j - k] = '\0';

return s; //等價於return &s[0];

}int main()

例項3:計算圓的周長和面積——函式的定義和呼叫

#include

using namespace std;

double length(double r)

double area(double r)

double function(double(*f)(double), double x)

int main()

6 1 指標的概念

為了說清楚什麼是指標,必須弄清楚資料在記憶體中是如何儲存的,又是如何讀取的。如果在程式中定義了乙個變數,在編譯時就給這個變數分配記憶體單元。系統根據程式中定義的變數型別,分配一定長度的空間。例如,c 編譯系統一般為整型變數分配4個位元組,為單精度浮點型變數分配4個位元組,為字元型變數分配1個位元組。...

27 指標的概念

本節知識點 1 指標的基本概念 2 使用指標的好處 3 變數的訪問方式 1 指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的。一般把儲存器中的乙個位元組稱為乙個記憶體單元,不同的資料型別所占用的記憶體單元數不等,如整型量佔4個單元,字元量佔1個單元等。為了正確地訪問這些記憶體單元,必須為每...

6 1指標的概念?

如果乙個程式中定義乙個變數,在編譯時就給這個變數分配記憶體單元。系統根據程式中的定義的變數型別,分配一定的長度空間。vc c 6.0中,乙個整型變數分配4個位元組,微單精度浮點數變數分配4個位元組,為字元型變數分配1個位元組。記憶體區的每乙個位元組有乙個編號,這個就是 位址 它相當於旅館中的房間號。...