设为首页 加入收藏

TOP

3.5.3 指针和数组(3)
2013-10-07 16:28:18 来源: 作者: 【 】 浏览:118
Tags:3.5.3 指针

3.5.3  指针和数组(3)

此时,ia[0]是一个使用了数组名字的表达式,对数组执行下标运算其实是对指向数组元素的指针执行下标运算:

  1. int i = ia[2];      // ia转换成指向数组首元素的指针  
  2.                     // ia[2]得到(ia + 2) 所指的元素  
  3. int *p = ia;        // p指向ia的首元素  
  4. i = *(p + 2);       // 等价于i = ia[2] 

只要指针指向的是数组中的元素(或者数组中尾元素的下一位置),都可以执行下标运算:

  1. int *p = &ia[2];    // p指向索引为2的元素  
  2. int j = p[1];       // p[1]等价于 *(p + 1),就是ia[3]表示的那个元素  
  3. int k = p[-2];      // p[-2]是ia[0]表示的那个元素  

虽然标准库类型string和vector也能执行下标运算,但是数组与它们相比还是有所不同。标准库类型限定使用的下标必须是无符号类型,而内置的下标运算无此要求,上面的最后一个例子很好地说明了这一点。内置的下标运算符可以处理负值,当然,结果地址必须指向原来的指针所指同一数组中的元素(或是同一数组尾元素的下一位置)。

内置的下标运算符所用的索引值不是无符号类型,这一点与vector和string不一样。

3.5.3节练习

练习3.34:假定p1和p2指向同一个数组中的元素,则下面程序的功能是什么?什么情况下该程序是非法的?

  1. p1 += p2 - p1; 

练习3.35:编写一段程序,利用指针将数组中的元素置为0。

练习3.36:编写一段程序,比较两个数组是否相等。再写一段程序,比较两个vector对象是否相等。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.5.3 指针和数组(2) 下一篇3.5.4 C风格字符串

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: