相关疑难解决方法(0)

什么是阵列衰减?

什么是阵列的衰变?与数组指针有关系吗?

c c++ arrays pointers

358
推荐指数
8
解决办法
5万
查看次数

指针减法和替代

使用数组时,标准算法(在C和C++中)通常会返回指向元素的指针.有时可以方便地获得元素的索引,也许是为了索引到另一个数组,我通常通过从指针中减去数组的开头来得到它:

int arr[100];
int *addressICareAbout = f(arr, 100);
size_t index = addressICareAbout - arr;
Run Code Online (Sandbox Code Playgroud)

这总是看起来简单而有效.然而,最近我指出,指针减法实际上返回a ptrdiff_t,原则上,如果" index"不适合a ,则可能存在问题ptrdiff_t.我真的不相信任何实施都会有足够的反复意义,允许人们创建如此大的arr(从而引起这样的问题),但是这里接受的答案承认这是可能的,而且我没有找到任何证据表明不这样做.因此,我已经辞职了(除非有人能说服我),并且会小心前进.这个答案提出了一种"安全"获取索引的相当复杂的方法; 真的没有更好的吗?

也就是说,我对C++中可能的解决方法感到困惑.我们有std::distance,但std::distance(arr, addressICareAbout)保证定义明确?一方面,(指向第一个元素的指针)arr可以递增到达addressICareAbout(右?),但另一方面std::distance应该返回a ptrdiff_t.标准容器的迭代器可能(可能)具有相同的问题.

c c++ pointers

10
推荐指数
1
解决办法
728
查看次数

标签 统计

c ×2

c++ ×2

pointers ×2

arrays ×1