- 取地址
- 指针
- 数组与指针
- 指针运算
- 引用
#includeusing namespace std; char a, b; string aa; int main(){ char c, d; cout << (void*)&c << endl; cout << (void*)&d << endl; cout << (void*)&a << endl; cout << (void*)&b << endl; cout << &aa << endl; return 0; }
操作系统中,分为堆、栈来存储变量。局部变量存在栈中,全局变量存在堆中。32位地址可表征4GB空间。
因此局部变量根据定义顺序,其地址递减;
全局变量根据定义顺序,其地址递增,且地址小于局部变量。
#includeusing namespace std; char a, b; int main(){ int a = 10; int* p = &a; // p为地址 // 可读取,并修改 类似通过数组下标修改元素值 cout << *p << endl; *p = 12; cout << *p << endl; cout << a << endl; // 同样改变 return 0; }
输出:
10 12 12数组与指针
#includeusing namespace std; int main(){ char c; int a[5] = {1, 2, 3, 4, 5}; cout << (void*)&c << endl; cout << a << endl; // 数组地址 for(int i = 0; i < 5; i ++ ){ cout << (void*)&a[i] << endl; } return 0; }
注:scanf("%d", a + 1);可用于输入某个数,该表达式为对a[1]赋值为输入
指针p+1,不是简单的地址加1,而是需要看变量类型。
#includeusing namespace std; int main(){ char c; int a[5] = {1, 2, 3, 4, 5}; int *p = a; cout << p << endl; cout << (p + 1) << endl; return 0; }
指针支持同类型的加减运算:同样地,看输出相差几个该变量类型。
#include引用using namespace std; int main(){ char c; int a[5] = {1, 2, 3, 4, 5}; int *p = &a[0]; int *q = &a[2]; cout << q - p << endl; return 0; }
#includeusing namespace std; int main(){ int a = 10; // int* p = &a; int& p = a; // 引用相当于别名 p += 5; cout << p << endl; cout << a << endl; return 0; }



