//
//数组
//
/*
void main()
{
const unsigned buf_size= 512, max_files = 20;
int staff_size = 27;
const unsigned array_size = 3;
int ia[array_size] = {0,1,2};
string str_arr[array_size] = {"hi","bye"};
//字符数组既可以用一组由花括号括起来、逗号隔开的字符字面值进行初始化,
//也可以用一个字符串字面值进行初始化。
//但是,字符串字面值自动包含一个空字符用于结束字符串。
char ca1[] = {'C','+','+'};
char ca2[] = {'C','+','+','/0'};
char ca3[] = "C++";//ca2 和 ca3 一样,维数是4
//数组不允许直接复制和赋值。
}
*/
/*
void main()
{
const size_t array_size = 10;
int ia[array_size];
for (size_t ix = 0; ix != array_size; ++ ix)
{
ia[ix] = ix;
}
}*/
//
//4.2 指针
//5-25
//vector的遍历可使用下标或迭代器,
//数组的遍历可用下标或指针
/*
#include <string>
#include <vector>
using namespace std;
void main()
{
string s("hello world");
string *sp = &s;
vector<int> ivec ;
vector<int> *pvec = &ivec;
int ival = 1024;
int *pi = 0;
int *pi2 = &ival;
int *pi3 = 0; //指针可以用0初始化,表示不指向任何值。
pi = pi2;
pi2 = 0;
string *sp1 = 0;
//除了使用数值0或在编译时值为0的const量外,还可以使用C++语言从C语言中继承下来的预
//处理变量NULL,值为0
int *p = NULL;
//void* 指针
//它可以保存任何类型对象的地址。
double obj = 3.14;
double *pd = &obj;
void *pv = &obj;
pv = pd;
//int *pi1 = pv;
//cannot convert from 'void *' to 'int *'
//但不允许使用void*指针操纵它所指向的对象。因为它不知道它所指向的对象的类型。
}
*/
/*
#include <string>
#include <vector>
#include <iostream>
using namespace std;
void main()
{
string s("hello world");
string *sp = &s;
cout << *sp << endl;
*sp = "goodbye";
cout << *sp << endl;
string s2 = "some value";
sp = &s2;
cout << *sp << endl;
string *sp3 = 0;
*sp3 = "goodbye"; //这样行 //表示sp3指向的值 //这难道是在堆中建个字符串,由指针指向它?
//string *sp3 = "goodbye"; //这样不行 //表示*sp3要地址初始化
}*/
//4.2.4使用指针访问数组元素
#include <string>
#include <vector>
#include <iostream>
using namespace std;
void main()
{
int ia[] = {0,2,4,6,8};
int *ip = ia;
int *ip2 = ip+ 4;
//ip = &ia[4];
ptrdiff_t n = ip2 - ip;
cout << n << endl;
}