取地址
#include <iostream>
using 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空间。 因此局部变量根据定义顺序,其地址递减; 全局变量根据定义顺序,其地址递增,且地址小于局部变量。
指针
#include <iostream>
using namespace std;
char a, b;
int main(){
int a = 10;
int* p = &a;
cout << *p << endl;
*p = 12;
cout << *p << endl;
cout << a << endl;
return 0;
}
输出:
10
12
12
数组与指针
#include <iostream>
using 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,而是需要看变量类型。
#include <iostream>
using 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 <iostream>
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;
}
引用
#include <iostream>
using namespace std;
int main(){
int a = 10;
int& p = a;
p += 5;
cout << p << endl;
cout << a << endl;
return 0;
}
|