C++二维数组&指针
2013-05-02 09:51
288 查看
//------------------------------------------不同形式的数组指针的区别 ---------------------------------
C++中的指针和数据很让人头晕,尤其是二维的情形。
1、int** ptr;//声明指向“一群”指向整数指针的指针。可以理解成ptr
。(N表示若干,以下同)
2、int* ptr[5];//声明5个指向整数指针的指针,即ptr有5个指向"一群"整数的指针。可以理解成ptr[5]
。
3、int (* ptr)[5];//声明指向"一群"指向 5 个整数数组的指针的指针。 可以理解成ptr
[5]。
针对1,因为是指针的指针,需要两次内存分配才能使用其最终内容。
首 先,ptr = ( int ** )new int *[5];
这样分配好了以后,它和(2)的意义相同了;然后要分别对 5 个指针进行内存分配,例如: ptr[0] = new int[20];
针对2,上面已经说过,ptr[0] = new int[20]。
针对3,这个不好理解,它的意义是"一群" 指针,每个指针都是指向一个 5 个整数的数组。
如果想分配N个指针,这样写: ptr = ( int ( * )[ 5 ] ) new int[ 5*N]。这样ptr[0] 指向第 0 个 5 个整数数组的首地址,ptr[1] 指向第1个5个整数数组的首地址。
//------------------------------------------二维数组的创建 ---------------------------------
class A;
.......
A * ptr1 = new A[num]; //动态声明一维数组
A **ptr2; //动态声明二维数组
ptr2 = new A*[row] //申请row个指针,每个指针属于A*,即可指向一群A,待分配==21
for( int i = 0 ; i < row; ++i)
ptr2[i] = new A[vol];
//对每个指针进行动态分配,每个指针指向vol个A对象==2
//------------------------------------------二维数组的删除 ---------------------------------
二维数组的删除与申请的步骤刚好相反。
for( int i = 0 ; i < row ; ++ i)
delete [] ptr2[i];
//删除每行的对象,对应上面的==2
delete [] ptr2; //删除row个指针,对应上面的==1
C++中的指针和数据很让人头晕,尤其是二维的情形。
1、int** ptr;//声明指向“一群”指向整数指针的指针。可以理解成ptr
。(N表示若干,以下同)
2、int* ptr[5];//声明5个指向整数指针的指针,即ptr有5个指向"一群"整数的指针。可以理解成ptr[5]
。
3、int (* ptr)[5];//声明指向"一群"指向 5 个整数数组的指针的指针。 可以理解成ptr
[5]。
针对1,因为是指针的指针,需要两次内存分配才能使用其最终内容。
首 先,ptr = ( int ** )new int *[5];
这样分配好了以后,它和(2)的意义相同了;然后要分别对 5 个指针进行内存分配,例如: ptr[0] = new int[20];
针对2,上面已经说过,ptr[0] = new int[20]。
针对3,这个不好理解,它的意义是"一群" 指针,每个指针都是指向一个 5 个整数的数组。
如果想分配N个指针,这样写: ptr = ( int ( * )[ 5 ] ) new int[ 5*N]。这样ptr[0] 指向第 0 个 5 个整数数组的首地址,ptr[1] 指向第1个5个整数数组的首地址。
//------------------------------------------二维数组的创建 ---------------------------------
class A;
.......
A * ptr1 = new A[num]; //动态声明一维数组
A **ptr2; //动态声明二维数组
ptr2 = new A*[row] //申请row个指针,每个指针属于A*,即可指向一群A,待分配==21
for( int i = 0 ; i < row; ++i)
ptr2[i] = new A[vol];
//对每个指针进行动态分配,每个指针指向vol个A对象==2
//------------------------------------------二维数组的删除 ---------------------------------
二维数组的删除与申请的步骤刚好相反。
for( int i = 0 ; i < row ; ++ i)
delete [] ptr2[i];
//删除每行的对象,对应上面的==2
delete [] ptr2; //删除row个指针,对应上面的==1
相关文章推荐
- <<c++ primer>> 函数指针的笔记
- [C++ 学习] C++ Primer 习题 4.36 指针数组 & 数组指针
- 【C++】引用&指针
- [C++基础]019_指针和引用(int*、int&、int*&、int&*、int**)
- C++ int & *p; //不能建立指向引用的指针;int *a; int * & p=a; //正确,指针变量的引用
- c++:成员指针运算符 .* 和 ->*
- 一个关于"int型二维数组"及"指针数组"作函参的地址传递和带回返回值的问题,指针的拓展练习〈二〉
- C++中通过指针修改类内私有成员变量 & 类的大小
- C++ 类 & 对象-C++ 内联函数-C++ this 指针-C++ 类的静态成员
- [C++基础]019_指针和引用(int*、int&、int*&、int&*、int**)
- C++学习笔记 c++引用(&)与指针(*)的区别
- c++中指针的引用 *&作为参数传递
- 【C++】不能将“this”指针从“const vector”转换为“vector & rhs"
- C++的引用和指针的区别(&和*)
- 黑马程序员-C-二维数组&指针数组&二维数组指针
- [C/C++]数组与指针——a,a[0],&a,&a[0]区别小结
- C/C++&nbsp;函数指针,强制转换示例
- 【C/C++语法外功】传值&传引用&传指针
- 【菜鸟C++学习笔记】20.常指针&指向常量的指针&指向常量的常指针
- 结构体中指向函数的指针(C) && 结构体中的函数(C++)