不懂就问

学术版

```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


|