指针和指针变量的理解:
#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; }
运行结果:
可见,指针本身在内存中也有自己的地址。