1.枚举和数组可以结合:
enum StudentNames{
KENNY, // 0
KYLE, // 1
STAN, // 2
BUTTERS, // 3
CARTMAN, // 4
MAX_STUDENTS // 5};
int main(){
int testScores[MAX_STUDENTS]; // 或者这个句子可以这样写:static_cast(StudentNames::MAX_STUDENTS)
testScores[STAN] = 76;
return 0;}
可以使用枚举类型中的**名称来表示序号索引。
注:不能将MAX_STUDENTS直接写成StudentNames::MAX_STUDENTS,因为如果这样表述,StudentNames必须要是一个命名空间才可以。可以对枚举类型做如下的改变:
namespace StudentNames{
enum StudentNames{
KENNY, // 0
KYLE, // 1
STAN, // 2
BUTTERS, // 3
CARTMAN, // 4
MAX_STUDENTS // 5};
int m
}
这样就可以了。
2.数组:
在用数组作为函数传参的时候,如果不希望数组被修改,可以使用关键字const,如下:
void passArray(const int prime[5]){}
算数组大小时(有几个元素):sizeof(array) / sizeof(array[0])
数组物理内存大小:sizeof(array)
3.二维数组
初始化二维数组:最简单的方法就是,把每一行都加一个大括号框起来,如下:
int array[3][5] ={
{ 1, 2, 3, 4, 5 }, // row 0
{ 6, 7, 8, 9, 10 }, // row 1
{ 11, 12, 13, 14, 15 } // row 2
};
另一个初始化方式:行(第一个数)可以省略。
4.一些关于指针的问题:
指针的释放:把指针delete之后,要将指针置空,比如:
delete p;
p=null;
指针的大小:sizeof(chPtr)
其实无论是什么类型的指针,指针大小都是相同的,指针只不过是存储一个物理地址。跟所指向的类型无关。
指针的初始化:指针如果不被初始化的话,默认情况下会指向一个垃圾地址,而且编译器也会报错。
空指针:空指针是指针变量指向的地址是0,而不是指向的内容是0,不也是指没有初始化的指针。空指针的定义如下:int *p;p=0;
空指针还可以代表布尔值,空指针会表示false,非空指针会表示true。
指针和数组有很多相似的地方。比如,对于数组a,指向它的指针p=a,和&a[0],如果设置二者输出,这二者是一样的。数组的首地址,就是数组第一个元素的地址。
但是二者之间也是有差异的。在使用sizeof函数的时候,sizeof(a)表示的是整个数组的大小,即:元素个数*每个元素的大小;而sizeof§表示的只是指向的物理地址的大小,这个大小相当于一个元素的样子。
指针的算术:对于:int *p;来说,p被赋予地址,因此p+1,p+2也必然是地址,只不过这个地址并不是单纯的地址上的加一加二,而是表示的是int 的大小乘以1或者2。p+1的大小和指针p所指向的类型有关。