指針和指針變量的理解:
#include<iostream> using namespace std; int main() { int n; int * m; m = &n; n = 10; cout << "n=:" << n << endl; *(int*)m = 110; cout << "*m:" << *m << endl; cout << "n:" << n << endl; cout << "&n: " << &n << endl; cout << "m: " << m << endl; system("pause"); return 0; }
指針:放的是其他普通變量在內存中的首地址。比如上面的代碼,&n代表n的首地址,是個指針。&n還有個名字,叫做引用,n是個整型變量,整型變量這四個字只是個名詞,它指代的是內存中一塊連續地址,此例是4個字節的連續內存地址。地址是用整數表示的。
指針變量:存放其他變量地址的那個變量。比如上面代碼中的m就是一個指針變量。
所以,指針是個首地址,是個整數,是個常量;指針變量是個變量。指針變量前面加個*號,意思是解引用,代表m所指向的那個普通變量的整型值。
int * m; //這句話中int *代表指向整型的指針,這樣寫是准備定義一個指針變量,m就是定義的指針變量,它用來存放其他普通變量的首地址。也可以這樣理解:m是個指針變量,它的類型是整型指針類型。
再來一例:

#include<iostream> using namespace std; int main() { int a = 10; int b = 22; int *p1; int* p2; p1 = &a; p2 = &b; cout << "a的地址是:"<<&a<< endl; cout << "b的地址是:" << &b << endl; cout << "指針變量p1所指向的地址是:"<<p1 << endl; cout << "指針變量p2所指向的地址是:" << p2 << endl; system("pause"); return 0; }
運行結果:

#include<iostream> using namespace std; int main() { int a = 10; int b = 22; int *p1; int* p2; p1 = &a; p2 = &b; cout << "a的地址是:"<<&a<< endl; cout << "b的地址是:" << &b << endl; cout << "指針變量p1所指向的地址是:"<<p1 << endl; cout << "指針變量p2所指向的地址是:" << p2 << endl; cout << "指針變量p1本身的地址是:" << &p1 << endl; cout << "指針變量p2本身的地址是:" << &p2 << endl; system("pause"); return 0; }
運行結果:
可見,指針本身在內存中也有自己的地址。