c++二维数组、二维指针、数组指针、指针数组
二维数组1.定义://方法一int arr1[2][3];//方法二int arr2[2][3] = { {1,2,3},{4,5,6} };//方法三int arr3[2][3] = { 1,2,3,4,5,6 };//方法四int arr4[][3] = { 1,2,3,4,5,6 };2.数组名称作用:查看二维数组所占内存空间大小;获取二维数组首地址。int arr[2][3] = { {1
一.二维数组
1.定义:
//方法一
int arr1[2][3];
//方法二
int arr2[2][3] = { {1,2,3},{4,5,6} };
//方法三
int arr3[2][3] = { 1,2,3,4,5,6 };
//方法四
int arr4[][3] = { 1,2,3,4,5,6 };
2.数组名称
作用:查看二维数组所占内存空间大小;获取二维数组首地址。
int arr[2][3] = { {1,2,3},{4,5,6} };
cout << "二维数组所占内存大小:" << sizeof(arr) << endl;
cout << "二维数组数组元素个数:" << sizeof(arr) / sizeof(arr[0][0]) << endl;
cout << "数组首地址:" << (int)arr << endl;
cout << "数组第一个元素地址:" << (int)&arr[0][0] << endl;
cout << "数组第一行地址:" << (int)(arr[0]) << endl;
cout << "数组第二行地址:" << (int)(arr+ 1) << endl;
cout << "数组第二行地址:" << (int)(arr[1]) << endl;
cout << "数组第二个元素地址(a[0][1]):" << (int)&arr[0][1] << endl;
//首地址+4*列*行
cout << "下一地址(注意与数组首地址区分):" << (int)( & arr + 1) << endl;
结果:
二.二维指针
1.申请二维指针
//申请二维数组
int row = 4, col = 5;
int** a = new int*[row];//先申请5行空间
for (int i = 0; i < row; i++) {
a[i] = new int[col];//为每一行申请空间
}
2.释放二维指针
//释放空间
for (int i = 0; i < row; i++) {
delete[] a[i];//释放每一行
}
delete[] a;
3.在内存中存储
三.数组指针
int (*p)[2] = new int[3][2];//数组指针
定义:
数组指针:顾名思义,“数组的指针”,是一个指针。
()的优先级高于【】,因此*先与p组成指针,然后在与【】构成数组指针。形成一个,指向含有两个int型数据数组的指针。
使用:
int arr[5] = { 0,1,2,3,4 };
int(*p1)[5] = &arr;//数组首地址(不是数组元素首地址)
for (int i = 0; i < 5; i++)
cout << (*p1)[i] << "\t";
cout << endl;
cout << endl;
int a[3][5] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };//二维数组
p1 = a;//二维数组a首地址
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
cout << (*(p1 + i))[j] << '\t';
}
cout << endl;
}

由于p1存储的是数组的首地址。因此,在执行p1+1时,相当于arr+5.
在内存中存储:
四.指针数组
int* p[3];//指针数组
定义:
指针数组,顾名思义“指针的数组”,即存放指针的数组。
因为【】的优先级要比 * 要高,所以 p 先与【】结合,构成一个数组的定义,数组名为 p,而int修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,
使用:
创建和申请空间
int* p[3];//指针数组
//申请空间
for (int i = 0; i < 3; i++) {
p[i] = new int[4];//为每行申请4个int
}
赋值
int* p1[3];
int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
for (int i = 0; i < 3; i++)
p1[i] = a[i];//把二维数组a第i行给p1
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
cout << p1[i][j] << '\t';
cout << endl;
}

const char* s[3] = { "abc","def","ghi" };
for (int i = 0; i < 3; i++)
cout << s[i] << endl;

在内存中存储:
参考:
https://blog.csdn.net/men_wen/article/details/52694069
http://c.biancheng.net/view/335.html
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)