int * prt
这里的表示*prt是一个指针,
类型为int*,
prt是指向int类型的指针
此时指针还未初始化,称为野指针
int x = 1;
int * ptr = & x;
此时prt指向了x
*:解引用运算符,又称间接运算符(与乘号完全不同!!!)
cout << * prt << endl; // 10 cout << prt << endl; // x的内存地址 如 0x7ffee2234a5c
int * p1, p2;
此处p1是指针,p2是变量
int x = 100, y = 50;
int * p1 = & x;
int ** p2 = & p1;
此处p1为一级指针,指针p2指向另一个指针,是二级指针
double x; double *p1 = &x, y; double *p2 = &(*p1); p1 = &y;
上述代码(heng zhong yao)中:
p1为指向y的指针
p2为指向x的指针(不指向y)
p2绝对不指向p1!!!(那是二级指针!!!)
y的类型是 double 不是 double* !
#includeusing namespace std; int main() { int x, y; int *p1 = &x; int *p2 = &y; int **p3 = &p1; *p1 = 3; *p2 = 5; cout << x << " " << y << endl; **p3 += 10; cout << x << endl; return 0; }
结果:
3 5
13
#includeusing namespace std; void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp; } int main() { int x, y; cin >> x >> y; swap(&x, &y); cout << x << " " << y; return 0; }
如果没有指针就无法完成交换,而这个代码可以完成两数交换。


![[C++]指针 [C++]指针](http://www.mshxw.com/aiimages/31/510062.png)
