C++ 指針學習起來有點難,但是很重要。一些 C++ 程序使用指針更容易執行,另外其他 C++ 程序,例如動態內存分配,沒有指針就無法執行。
每個變量都是一個內存位置,每個內存位置都定義了其地址,可以使用與號(&)運算符訪問該地址,該運算符表示內存中的地址。
下面代碼考慮以下將打印定義的變量的地址
- #include <iostream>
- using namespace std;
- int main () {
- int var1;
- char var2[10];
- cout << "Address of var1 variable: ";
- cout << &var1 << endl;
- cout << "Address of var2 variable: ";
- cout << &var2 << endl;
- }
輸出如下
- Address of var1 variable: 0x61fe1c
- Address of var2 variable: 0x61fe12
指針聲明
在編程語言中,指針是一個變量,其值是另一個變量的地址。與任何變量或常量一樣,您必須先聲明一個指針,然后才能使用它。
指針變量聲明的一般形式是 :
- type *var-name;
這里,type是指針的類型;它必須是有效的 C++ 類型,并且var-name是指針變量的名稱。
用于聲明指針的星號與用于乘法的星號相同。但是,在此語句中,星號用于將變量指定為指針。
下面是有效的指針聲明
- int *ip; // pointer to an integer
- double *dp; // pointer to a double
- float *fp; // pointer to a float
- char *ch // pointer to character
所有指針的值的實際數據類型,無論是整數、浮點數、字符還是其他類型,都是相同的,一個長的十六進制數,代表同一個內存地址。
不同數據類型的指針之間的唯一區別是指針指向的變量或常量的數據類型。
C++ 使用指針
- #include <iostream>
- using namespace std;
- int main(){
- int var = 5;
- int *ip;
- ip = &var;
- cout << "變量Var的值:" << endl;
- cout << var << endl;
- cout << "變量Var的中存儲的地址ip:" << endl;
- cout << ip << endl;
- cout << "訪問指針中可用地址處的值:";
- cout << *ip << endl;
- }
具體輸出如下
- 變量Var的值:
- 5
- 變量Var的中存儲的地址ip:
- 0x61fe14
- 訪問指針中可用地址處的值:5
請注意,0x0相當于0. 它只是 的十六進制表示0。
指針的概念
指針有很多但很簡單的概念,它們對 C++ 編程非常重要。以下是 C++ 程序員應該清楚的幾個重要的指針概念 -
空指針
如果沒有要分配的確切地址,將指針 NULL 分配給指針變量。分配為 NULL 的指針稱為空指針。
- #include <iostream>
- using namespace std;
- int main () {
- int *ptr = NULL;
- cout << "The value of ptr is " << ptr ;
- }
當上面的代碼被編譯和執行時,它會產生以下結果 -
- The value of ptr is 0
在大多數操作系統上,不允許程序訪問地址 0 處的內存,因為該內存是由操作系統保留的。空指針:指針變量指向內存中編號為0的空間
要檢查空指針,您可以使用 if 語句如下 -
- if(ptr) // succeeds if p is not null
- if(!ptr) // succeeds if p is null
指針算術
指針是一個地址,它也是一個數值;因此,可以像對數值一樣對指針執行算術運算。有四種算術運算符可用于指針:++、--、+和-。
“指針++”和“指針--”表示指針所指地址的下一個或前一個數據的地址。
- #include <iostream>
- using namespace std;
- int main()
- {
- int a[5];
- int i;
- int *p;
- for(i=0; i<5; i++)
- cin>>a[i];
- cout<<endl;
- for(i=0; i<5; i++)
- cout<<a[i]<<" ";//使用數組名和下標訪問的方式訪問數組進行輸出
- for(i=0; i<5; i++)
- cout<<*(a+i)<<" ";//使用數組名和指針運算訪問的方式進行輸出
- for(p=a; p<(a+5); p++)
- cout<<*p<<" ";//使用指針變量訪問的方式進行輸出
- return 0;
- }
運行結果
- 1
- 2
- 3
- 4
- 5
- 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
原文鏈接:https://mp.weixin.qq.com/s/SiLmZD-V_ZNqSaR4ibb7nA