[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++ 学习] C++ Primer 第4版 习题 4.30 字符串操作 & 我对堆内存 和 常量区内存的一些理解

首先随便说一个和这个习题无关的内容.   看下面一段代码,找找问题: int main() { char *str = "test"; delete str; return 0; } ...

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

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

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

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

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

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

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

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

C++Primer(第4版)习题解答

  • 2013-03-06 19:33
  • 2.48MB
  • 下载

C++primer第4版第十章关联容器

使用pair对象必须包含头文件utility,创建pair对象有多中方式...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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