- 指针运算就是在原地址加上(或减去)指针类型所占的字节数的倍数
int num = 16;
std::cout <<"num的地址: " << &num << std::endl;
int *p = #
std::cout <<"num+1的地址:" << p + 1 <<std::endl;
输出:
num的地址: 00000098D8EFFB44
num+1的地址:00000098D8EFFB48
如果不是原地址加上(或减去)指针类型所占的字节数的倍数,num的地址:00000098D8EFFB44 ,加上1变成00000098D8EFFB45,此时首元素占据00000098D8EFFB44-00000098D8EFFB47,根本从00000098D8EFFB45取不出数据来。
- 数组的地址就是数组首元素的地址,要想得到数组中后面元素,地址偏移解引用即可。
int nums[] {67,78,89,30,88,99};
cout << " nums :" << &nums << " "<< *(nums) << endl;
cout << " nums[1] :" << &nums[1] << " "<< *(nums+1) << endl;
cout << " nums[2] :" << &nums[2] << " "<< *(nums+2) << endl;
cout << " nums[3] :" << &nums[3] << " "<< *(nums+3) << endl;
cout << " nums[4] :" << &nums[4] << " "<< *(nums+4) << endl;
cout << " nums[5] :" << &nums[5] << " "<< *(nums+5) << endl;
输出:
nums :00000098D8EFFB68 67
nums[1] :00000098D8EFFB6C 78
nums[2] :00000098D8EFFB70 89
nums[3] :00000098D8EFFB74 30
nums[4] :00000098D8EFFB78 88
nums[5] :00000098D8EFFB7C 99
- 堆内存中存放数组
//在堆内存当中开辟空间,然后存放一个数字8
int *p1 = new int(8);
//在堆内存当中开辟空间,存放一个数组,这个数组的长度是6,长度值6必须得指明
int *p2 = new int[6];
int *p3 = new int[6]{10,20,30,40,50,60};
*p3 = 100;
std::cout << "Array[0] "<<p3 << " "<< *p3 << std::endl;
std::cout << "Array[1] "<<p3 + 1 << " "<< *(p3+1) << std::endl;
std::cout << "Array[2] "<<p3 + 2 << " "<< *(p3+2) << std::endl;
std::cout << "Array[3] "<<p3 + 3 << " "<< *(p3+3) << std::endl;
std::cout << "Array[4] "<<p3 + 4 << " "<< *(p3+4) << std::endl;
std::cout << "Array[5] "<<p3 + 5 << " "<< *(p3+5) << std::endl;
//释放空间...
delete[] p2;
delete[] p3;
输出:
Array[0] 000001FED554E7C0 100
Array[1] 000001FED554E7C4 20
Array[2] 000001FED554E7C8 30
Array[3] 000001FED554E7CC 40
Array[4] 000001FED554E7D0 50
Array[5] 000001FED554E7D4 60