代码改变世界

一点整理

2011-03-11 22:58  Rollen Holt  阅读(212)  评论(0编辑  收藏  举报

/*

* 这个程序说明当我们用vector时候,不能用下标进行赋值,会出现错误:

* error C2374: 'index' : redefinition; multiple initialization

* 但是对于内置的数组类型是可以的。

*/

#include <iostream>

#include <vector>

using namespace std;

int main()

{

//         vector<int>data;

//         for (vector<int>::size_type index=0;index!=10;++index)

//         {

//                 data[index]=index;

//         }

//         for(vector<int>::size_type index=0;index!=10;++index)

//                 cout<<data[index];

int data[10];

for (size_t index=0;index!=10;++index)

{

data[index]=index;

}

for ( index=0;index!=10;++index)

{

cout<<data[index];

}

return 0;

}

尽量避免使用指针和数组以及c风格的字符串,用vector和迭代器以及string类型来代替

把 int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。但允许把数值 0 或在编译时可获得 0 值的 const 量赋给指针

例如这个语句就是错误的: int *pi=1;

指针只能初始化或赋值为同类型的变量地址或另一指针:

double dval;
double *pd = &dval; // ok: initializer is address of a double
double *pd2 = pd; // ok: initializer is a pointer to double

int *pi = pd; // error: types of pi and pd differ
pi = &dval; // error: attempt to assign address of a double to int *

void* 指针

C++ 提供了一种特殊的指针类型 void*,它可以保存任何类型对象的地址:

double obj = 3.14;
double *pd = &obj;
// ok: void* can hold the address value of any data pointer type
void *pv = &obj; // obj can be an object of any type
pv = pd; // pd can be a pointer to any type

void* 表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。void* 指针只支持几种有限的操作:与另一个指针进行比较;向函数传递 void* 指针或从函数返回 void* 指针;给另一个 void* 指针赋值。不允许使用 void* 指针操纵它所指向的对象

两个指针减法操作的结果是标准库类型(library type)ptrdiff_t 的数据。与 size_t 类型一样,ptrdiff_t 也是一种与机器相关的类型,在 cstddef 头文件中定义。size_t 是 unsigned 类型,而 ptrdiff_t 则是 signed 整型。

引用也是一个变量,它也占空间了吧。 只不过我么无法访问,编译器自动给我们分配的空间而已。如果我们观察2者的地址的话我们会发现他们的地址也是一样的。这只不过是C++障人耳目的伎俩而已!―――它要让你觉得使用对象的引用和使 用对象本身没什么区别。 从内存中(我没有太好的名词)看引用和指针没什么区别。从编译器的角度来看,有很多不同,比如我们可以知道指针变量的地址(&p),却不能找到引用自身的地址,编译器让

我们感觉(请注意这个词),对引用的操作好像对变量的操作一样直接。