对于指向同一数组arr[5]中的两个指针之差的验证:数组如下:ptr = arr;
0 1 2 3 4 ptr[0] ptr[4] 1: #include <stdio.h>2: #include <stdlib.h>3:4: int main(int argc, char *argv[])5: {6: int arr[5] = {1,2,3,4,5};
7: int *ptr = arr;
8: printf("%d/n",ptr[4]-ptr[0]);9:10: system("PAUSE");11: return 0;
12: }运行输出:4
更换为字符数组,测试结果一样。
《C和指针》P110 分析如下:两个指针相减的结果的类型为ptrdiff_t,它是一种有符号整数类型。减法运算的值为两个指针在内存中的距离(以数组元素的长度为单位,而非字节),因为减法运算的结果将除以数组元素类型的长度。所以该结果与数组中存储的元素的类型无关。
类似的还有如下类型:(点击这里)
size_t是unsigned类型,用于指明数组长度或下标,它必须是一个正数,std::size_t
ptrdiff_t是signed类型,用于存放同一数组中两个指针之间的差距,它可以使负数,std::ptrdiff_t.
size_type是unsigned类型,表示容器中元素长度或者下标,vector<int>::size_type i = 0;
difference_type是signed类型,表示迭代器差距,vector<int>:: difference_type = iter1-iter2.
前二者位于标准类库std内,后二者专为STL对象所拥有。
ptrdiff_t 与指针减法
最新推荐文章于 2023-10-03 08:30:00 发布