C++Primer读书笔记-第四章

对应于容器(vector)和迭代器(iterator),C++从C语言继承了数组和指针。

4.1数组

数组时由类型名、标示符和维数组成的符合数据类型。
没有所有元素都是引用的数组。

【数组定义和初始化】

数组的维数必须是大于或者等于1的常量表达式,如果需要计算才能确定,必须使用new或者malloc。

可以在定义的时候将初始化值写在{}中,如下:
int array[5] = {0,1,2}
则,a[0]到a[2]初始化为0、1、2,而后面的a[3]和a[4]为0

对于没有显示初始化的数组:

  • 如果定义在函数体外,全部初始化为0
  • 函数体内定义的,不初始化
  • 不管在内外,如果是类类型的,调用默认构造函数。(必须提供)

对于字符类型的数组(字符串)
可以使用字符串字面值进行初始化,例如:
char a[7]="Hello!";
但是要注意,此时为7个字符,因为默认在最后面加了一个'\0'

不能使用一个数组对另外一个数组进行初始化。

【数组操作】

数组可以用下标访问其中的元素,类型是size_t(vector是vector::size_type)。

需要非常注意数组的下标越界问题。

4.2指针

指针式指向某种类型对象的符合数据类型,是用于数组的迭代器

简单来说,指针保存着另外一个变量(对象)的地址。
string s="Hello World";
string *sp = &s;
如上,使用&操作符来取地址,这个操作符只能用于左值

【指针定义和初始化】

每个指针都与其指向的数据类型关联,不能把int指针指向float变量。
使用*符号把一个标示符声明为某类型指针,例如:
int *pi;

注意,*号只对其后面的一个变量起作用,再往后的变量不会被声明为指针。
好的格式:int *a,*b,*c;  //好!
错的格式:int* a,b,b;    //错误,而且不好,因为只有a是指针!

指针只可能取3个数值:一个对象的地址,指向对象后面的另一个对象,或者是0(NULL)。

指针定义后,使用前,一定要初始化!
只能用以下几种类型之一对指针进行初始化:

  • 0值常量表达式(NULL)
  • 类型匹配的对象地址
  • 另一个对象后的下一个地址
  • 同一类型的另外一个指针

其实只多了一个,可以把另外的指针拿来初始化。

void*是一种万能指针,可以存储任何类型指针的地址,但是,不能对void*解引用

未完待续

 

 

Leave a Reply

Your email address will not be published.