当前位置:文档之家› 指针、引用和二维数组

指针、引用和二维数组


二二维数组、指针、引用用 1.定义对象: 类型 对象; 如 int a1; 或者 DemonFruit fruit1; 定义的是一一个对象, 而而不是一一个指针 类型* 对象;如int * a2;或者 DemonFruit* fruit2; 定义的是一一个指向 对象a或者fruit的指针 2.引用用: 指针和对象均可以被引用用。引用用必须被初始化。引用用传值时不需要传 地址而而是直接传值。没有引用用的指针。 对象的引用用:int &b = a1; DemonFruit &f = fruit1; 指针的引用用:int *&b = a2; DemonFruit* &f = fruit2;//可以从右往左 理解,&f是一一个引用用,引用用的为DemonFruit*类型(指针) 作为函数参数:void swap1(int &a, int &b)//引用用完成交换 { int tmp = a; a = b; b = tmp; } void swap2(int* a, int* b)//指针完成交换需要解引 用用(*指针) { int tmp = *a; *a = *b; *b = tmp; } int a = 1; int b =2; swap1(a,b); <==>swap2(&a,&b); 作为返回值: int a = 5; int& getIndex1() { //… return a; } int* getIndex2() { //… return &a; } 在cocos2dx中create出的类对象几几乎都是使用用指针的。例如DemonFruit* f;或者 Layer* layer…;如果要传递参数或者返回值时往往使用用指针来获取对象。除非非希望 得到指针本身身,这时会使用用二二维指针或者指针的引用用。 3.二二维指针: 例如int**a;或者DemonFruit** f; 二二维指针指向的内容是一一个或 者一一些一一维指针,因此 int i = 1 a = i;//error,a = &i;//error,a=&&i;//right 4.一一维数组: 数组定义有静态和动态两种方方式,静态方方式如int a[5];//静态方方式的参 数必须是常量,如果int i = 8, int a[i];//error。 动态分配必须手手动开辟内存,不要忘记释放内存。开辟了内存后使用用 一一个对应类型的指针标记这块内存,方方便访问。如 int i = 8; int* a = (int*)malloc( i * sizeof(int));动态分配可以使用用变量作为参数,这里里a是指向一一个“能存放8个int数据的 内存”的指针。使用用完成后要释放free(a); 动态数组数据的访问和静态数组数据的访问形式一一样可以使用用下标。 如 a[1]; 5.二二维数组: 二二维数组的定义也有静态和动态两种。 静态方方式: 真二二维数组: 如 int a[2][3];分配了一一个2行行3列,第一一个下标可以省 略但是第二二个不可以。同样参数也不能使用用变量。访问可以使用用a[row][col],int* a[2][3]定义了一一个存储i: 即一一维数组,例如定义一一个a[6],可以用用行行列访问其中 元素,int row = 1;int col = 2;int width = 3; int height =2;则访问第二二行行第一一列的元素 a[row * width + col]即访问a[5]。访问不可以使用用a[row][col] 动态分配: 真二二维数组: int**a = (int**)malloc(height * sizeof(int*))开辟一一 块内存用用于存放height个int型指针(即int*),并用用指针a标记(指向指针的指针所以 用用两个*),在对该块内存中的每一一个指针分配内存。访问可以使用用a[row][col] for(int k = 0; k < height; k++) { a[k] = (int*)malloc(width * sizeof(int));//a[k] 是一一个int*类型,内部存储width个int ——>一一片片一一片片分配内存 } 也可以挨个开辟内存,如int* a[3][5];//定义了一一个3 行行5列的数组,每个元素存放int*类型(指针)。 for(int i = 0; i < 3;i++) { for(int j = 0; j < 5; j++) { int* k = (int*)malloc(sizeof(int));//动态分 配的所以不会释放 ——>一一个一一个分配内存 a[j][i] = k; } } 伪二二维数组: 例如 int size2 = sizeof(int) * width * height;int* a = (int*)malloc(size2),这时指针a指向了一一个新开辟的内存,这块内 存中可以存放width * height个int数据。访问不可以使用用a[row][col],使用用a[row * width+col]访问
相关主题