[C++学习] C++ Primer 第4版 习题4.18

原创 2012年03月30日 13:38:53

如有错误敬请指正.

 

这个习题需要注意以下几点:

 

1.指针的加减操作,在它指向一组元素(比如数组)的时候,是比较有意义的.

指针+n ,表示 移动 n个 元素类型大小 的内存单元.即 指向往后数第n个元素.

这里 n可以为 负数 ,表示指向往前数第n个元素.

 

2.pointer 和 array 的关系,和 iterator 和 vector 的关系非常类似,有许多相同的性质.

但是也有许多不同.

比如 iterator 一旦超过了vector 的 [begin(),end()]区间,运行时就会报错.

但 pointer 即使超过了 array 的范围,也不会出错,只有在超过范围利用这个超过范围的pointer取或设置数组的值得时候,

才会出错.

 

3.

两个指针相减的值是 ptrdiff_t 类型的数值,这种类型是 signed的,而不是 size_t类型( unsigned )的.

所以允许负数的出现.

比如

int arr[10];

int *p1 = &arr[3];

int *p2 = &arr[5];

p1-p2 的结果 就会是 -2,而不会是一个很大的 负数.

 

利用指针的加减法,可以更加灵活的操作指针.

比如

p1 += p2-p1 等同于  p1 = p2,无论 p1和 p2谁在前谁在后都成立.

 

4.

指针许多地方和iterator 接近,所以用指针遍历数组时,也可以参考iterator遍历vector.

 for(int *pbegin = arr,*pend = arr+arr_size;pbegin!=pend;++pbegin)

注意体会这个 for 循环 和 iterator 的相似之处.

 

#include<iostream>
#include<string>
#include<vector>
#include"GlobalDefine.h"
#include"GlobalDefine.h"
#include"Double.h"

using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;

int main()
{
	const size_t arr_size = 10;
	int arr[arr_size];

	for(int *pbegin = arr,*pend = arr+arr_size;pbegin!=pend;++pbegin)
	{
		*pbegin = 3;
	}

	return 0;
}


 

[c++学习] C++ primer 第4版 习题4.20 4.21 常量指针 和 指针常量

这个习题需要注意以下知识点:   1. const int * p; 我们暂时称它为 "常量指针",即指向常量的指针. 他可以指向const 常量,也可以指向非 const的变量,但是都不能通过...

读书笔记之:C++ Primer (第4版)及习题(ch12-ch18)

读书笔记之:C++ Primer (第4版)及习题(ch12-ch18) [++++] 第12章 类 1. 类的声明与定义:前向声明,不完全类型 2. 从const函数返回*this 3. 可...

C++学习笔记(二)C++primer 部分习题和知识点

命名规范想吧这个命名命名规范写到最前面,匈牙利命名法: 名字=属性+类型+对象描述 http://www.cnblogs.com/ggjucheng/archive/2011/12/15/22892...

C++ Primer(第4版)-第5部分:高级主题——学习笔记

C++ Primer(第4版)-第5部分:高级主题

C++ Primer(第4版)-第1部分:基本语言——学习笔记

C++ Primer(第4版)-第1部分:基本语言——学习笔记

C++ Primer(第4版)-第3部分:类和数据抽象——学习笔记

C++ Primer(第4版)-第3部分:类和数据抽象 学习笔记

C++ Primer(第4版)-第2部分:容器和算法——学习笔记

C++ Primer(第4版)-第2部分:容器和算法——学习笔记

C++Primer_第4版_习题全解

  • 2013年07月26日 13:37
  • 1.64MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[C++学习] C++ Primer 第4版 习题4.18
举报原因:
原因补充:

(最多只允许输入30个字)