```cpp
int a[4];
int *p=a,*p2=a+1;
//p2-p=1
//p2+p=2*a+1
// * / 无意义
```
by clx201022 @ 2024-03-28 19:07:33
@[wangzh1207](/user/944447)
要理解这个问题,首先需要明白:**数组是占用连续的内存的**。例如,对于 `int[]` 数组 `{ 1, 2, 3, 4 }`(内存地址简化):
```
内存地址 | 数据
0x0010 | 1
0x0014 | 2
0x0018 | 3
0x001D | 4
```
首先排除 C 和 D 选项:对于任何指针,这两个运算都是无意义的。
再看减法和加法,实践出真知:
```cpp
int arr[]{ 1, 2, 3, 4 };
int* ptr1 = &arr[0];
int* ptr2 = &arr[1];
std::cout << (ptr2 - ptr1) << std::endl; // 1
int* ptr3 = &arr[3];
std::cout << (ptr3 - ptr1) << std::endl; // 3
std::cout << (ptr3 - ptr2) << std::endl; // 2
```
总结:数组指针的减法(大减小)得到的结果是其所指向的元素的相隔元素数量。而加法基本无实际意义。
by CleanIce @ 2024-03-29 18:40:15