C 指標學習

2021-06-18 14:38:01 字數 1771 閱讀 7905

一、指標的概念:

如果在程式中定義乙個變數,在編譯時系統會自動給這個變數分配記憶體單元,並根據程式中的定義的變數型別,分配一定長度的記憶體空間,這樣的記憶體單元裡放著變數的值。為了便於記憶體單元的訪問,系統為每乙個記憶體單元分配乙個位址。在變數的生存期內,不管以後對變數如何賦值,其記憶體位址都是固定不變的。

反映記憶體單元的位址,稱為記憶體單元的「指標"。為了能直接訪問這些記憶體單元,c++便引入了指標變數這個概念。

這樣來看:本質上講指標也是一種變數,普通的變數包含的是實際的資料,而指標變數包含的是記憶體中的一塊位址,這塊位址指向某個變數或者函式,指標就是位址。指標是乙個指示器,它告訴程式在記憶體的哪塊區域可以找到資料。

通過下面的**來理解:

#include

using namespace std;

void main()

執行結果:

三、指標的算術運算與關係運算:

(1)指標的算術運算:

指標是乙個位址,位址是乙個整形數,所以指標的算術運算可看做事整型數之間的運算。

驗證**:

#include

using namespace std;

int main()

執行結果:

通過以上**可見:

p是001bfc84,p+2=001bfc8c,說明指標向後方移動了兩個整形變數的大小。

(2)指標的關係運算:

兩個指標變數的關係運算是根據兩個指標變數值得大小進行比較的。在實際應用中,通常是比較兩個指標反映位址的前後關係或判斷指標變數的值是否為0。

例如,這個例子利用指標的關係將字串進行倒置:

#include

using namespace std;

void main()

cout<

四、指標與陣列:

有兩種方法來用指標來運算元組:

方法一、

陣列指標的定義格式:

定義乙個陣列並將陣列裡的數依次來顯示:

#include

using namespace std;

void main()

;int (*p)[10];

p=&a;

for(int i=0;i<10;i++)

cout<

方法二、

陣列中所有的元素都是依次儲存到記憶體單元中的,每個元素都有相應的位址。c++中規定陣列名代表陣列中下標為0的元素的位址,即陣列的首位址。

例如:int a[5];

a所表示的位址元素a[0]的位址。

a[i]=*(a+i);由於a是乙個位址指標,a+i表示的就是a[i]的位址值。所以定義指標可如下:

int *pi;

pi=a;

定義乙個陣列並將陣列裡的數依次來顯示:

#include

using namespace std;

void main()

;int *p=a;

for(int i=0;i<10;i++)}

參考**:

C學習 指標

1 指標 a int a 表示乙個記憶體空間,這個空間用來存放乙個整數 int b int a 表示乙個記憶體空間,這個空間用來存放乙個指標,這個指標指向乙個存放整數的空間,即 a 中提到的空間 c int a 表示乙個記憶體空間,這個空間用來存放乙個指標,這個指標指向乙個存放指標的空間,並且指向的...

C 學習 指標

關於二級指標的學習遇到了一些困惑,也有了一些不知是否正確的結論。在文章中留個底以記錄學習過程。author 以下是一些暫時的結論 1.將每個變數名都理解成位址 2.注意區分堆與棧中的變數 3.表示取左值 根據位址跳轉 表示取位址 宣告時表示建立乙個引用 ex.char string aaa char...

C 指標學習

1.指標即位址,指標型別的變數前面要加 是取變數的位址 int a,b int p1,p2 a 100 b 10 p1 a p2 b cout p1 p2 include using namespace std c 中引用傳遞的兩種方式 和 引用方式更加簡潔,直觀 函式的引數型別是指標型別,將變數的...