随笔-15  评论-5  文章-1  trackbacks-0
对于指向同一数组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对象所拥有。

posted on 2011-04-12 20:59 yibani 阅读(1976) 评论(3)  编辑 收藏 引用

评论:
# re: ptrdiff_t 指针减法 2011-07-15 11:34 | cpp
ptr[4],就是arr[4]吧,也就是数组第4个值,
ptr[0],也同样道理。

这两个值相减,和指针地址有啥关系?

搞不懂。。。。  回复  更多评论
  
# re: ptrdiff_t 指针减法 2011-08-02 10:34 | zxyu
应该是 printf("%d\n",&ptr[4]-&ptr[0]); 吧。  回复  更多评论
  
# re: ptrdiff_t 指针减法 2013-01-24 14:24 |
printf("%d\n",&ptr[4]-&ptr[0]);  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理