如何输出这个动态怎样获取二维数组中一维数组的个数的值?

数组指针和指针数组数组指针数组指针(Array Pointer):数组指针是指向数组的指针,它指向数组的首地址。数组指针的声明需要指定所指向的数组类型,而不是数组的大小。int a1[3] = {1, 2, 3};
int (*p)[3]; // 声明一个指向包含三个整数的数组的指针
p = &a1; // 将p指向数组a的首地址
或者更直观点,便于后文理解。int a[][3] = { {1,2,3},{4,5,6} };
int(*p)[3]=a;
指针数组指针数组(Pointer Array):指针数组是一个数组,其元素都是指针类型。每个元素指向不同的内存位置,这些位置可以是相同类型的数据。在声明指针数组时,需要指定数组的大小和元素类型,然后每个元素都可以被赋值为指向相应数据类型的指针。 int a1[3] = {1,2,3};
int a2[3] = {3,2,1};
int a3[3] = {2,2,2};
//指针数组
int* b[3] = {a1,a2,a3};
C++创建二维数组方法一 数组指针int main() {
//使用的是数组指针的方法
int(*p)[3] = new int[3][3];
// 给二维数组赋值
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
p[i][j] = i * 3 + j + 1;
}
}
// 访问和输出二维数组的元素
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cout << p[i][j] << " ";
}
cout << endl;
}
delete[] p;
return 1;
}
方法二 指针数组int main(){
int rows = 2;
int cols = 3;
// 动态分配一个 2x3 的二维数组
int** p = new int*[rows];
for (int i = 0; i < rows; i++) {
p[i] = new int[cols];
}
// 给二维数组赋值
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
p[i][j] = i * 3 + j + 1;
}
}
// 访问和输出二维数组的元素
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cout << p[i][j] << " ";
}
cout << endl;
}
delete[] p;
}
C语言创建二维数组方法一 指针数组int main() {
//创建2*3的二维数组。
int** a = (int**) malloc(sizeof(int*) * 2);
for (int i = 0; i < 2; i++)
{
a[i] = (int*)malloc(sizeof(int) * 3);
}
// 给二维数组赋值
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
a[i][j] = i * 3 + j + 1;
}
}
// 访问和输出二维数组的元素
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cout << a[i][j] << " ";
}
cout << endl;
}
delete[] a;
return 1;
}
malloc(sizeof(int*) * 2) 是一个大小为2的指针数组,里面有两个位置{int*,int*}可以存放int指针类型的值。这里可能比较迷惑的是为什么用int** a来接收,其实a默认指向的是两个位置的第一个位置的地址,该位置 int* 其实可以理解为就是一个一维数组,那么该数组的地址就是指针的指针,所以可以使用int**的变量a来指向。a[0]、a[1]分别是第一行、第二行({int*,int*})的开始地址。a[0][1]就是第一个int*地址上下标为’1’的值。要明白int**为什么能指向int*[2],看完以下代码可能就清晰了:int main() {
//创建2*3的二维数组。
int x1[] = {1,2,3};
int x2[] = {4,5,6};
int* s[2] = {x1 ,x2 };
int** a = s;
cout <<a[0][0]<<"
"<<a[0][1] <<"
"<<a[0][2]<<endl;
cout <<a[1][0]<<"
"<<a[1][1] <<"
"<<a[1][2]<<endl;
return 1;
}
运行输出:方法二 数组指针int main(){
//数组指针a指向2*3的二维数组
int(*a)[3] = (int(*)[3])malloc(sizeof(int)*2*3);
// 给二维数组赋值
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
a[i][j] = i * 3 + j + 1;
}
}
// 访问和输出二维数组的元素
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cout << a[i][j] << " ";
}
cout << endl;
delete[] a;
return 1;
}
}
二维数组什么是二维数组二维数组的初始化静态初始化动态初始化#二维数组的赋值二维数组数组的内存图例#二维数组的遍历三维数组的理解二维数组就是在一维数组的基础上,把每个元素变成了一个数组,那么同理,三维数组就是在二维数组的基础_上,把二维数组中的元素又变成了一个数组,虽然我们可以通过Java代码来实现,但是实际操作中,很少有使用场景,了 解其原理即可;不建议使用 有点复杂二维数组的案例1、二维数组以及多位数组的定义方式 //1、二维数组的定义方式
//1.1、静态初始化
int [] arr1 = {1,2,3};
int [][] arr2 = {{1,2,3},{4,5,6},{7,8,9,10}};
int [][][] arr3 = {
{
{1,2,3},
{4,5,6},
{7,8,9}
},
{
{10,11,12},
{13,14,15},
{16,17,18}
},
{
{19,20,21},
{22,23,24},
{25,26,27}
}
};
//1.2、动态初始化
int [][] arr4 = new int[][] {};
int [][] arr5 = {};
int [][] arr6 = new int[3][];//不能写后面的大括号,以及必须要有高维度的大小
//
int [][] arr7 = new int[][4];//不允许这样写
int [][] arr8 = new int[3][10];
2、获取数据以及赋值的方式
//int [][] arr2 = {{1,2,3},{4,5,6},{7,8,9,10}};
System.out.println(arr2[1][1]);
//int [][] arr6 = new int[3][];
//因为我们只定义了数组的一维长度为3,而它的二维长度并没有定义,如果没有定义就相当于你的一维元素的地方
//是一个null,所以这样调用的话,就会报空指针异常
//
arr6[0][9] = 100;
//int [][] arr8 = new int[3][10];
arr8[0][9] = 100;
arr8[1][2] = 200;
arr8[2][5] = 300;
System.out.println(arr8[0][9]+","+arr8[1][2]+","+arr8[2][5]);
3、for循环遍历
//3.1、for循环
for(int i = 0;i<arr2.length;i++) {
for(int j = 0;j<arr2[i].length;j++) {
System.out.print(arr2[i][j]+"\t");
}
System.out.println();//换行
}
System.out.println();
//3.2、直接进行一次for循环,然后在循环体内使用Arrays.toString();
for(int i = 0;i<arr2.length;i++) {
System.out.println(Arrays.toString(arr2[i]));
}
//3.3、foreach循环
for(int[] i : arr2) {
for(int j:i) {
System.out.print(j+"\t");
}
System.out.println();
}
练习用随机数对象产生0---1000范围内的整数,用以初始化-个8*8的二维数组,然后编程
把随机数放入到二维数组中去,并且找出二维数组中的最大数和最小数,并将其交换位置。
要求输出原始二维数组及交换后的二维数组 (不考虑最大值最小值有重复的情况) ;
//1、定义出一个8*8的二维数组
int [][] arr = new int[8][8];
//2、需要使用到随机数,所以要创建一个Random对象
Random ran = new Random();
//3、针对二维数组进行循环
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
arr[i][j] = ran.nextInt(1001);//0~1000
}
}
//4、输出二维数组最初的样子
for(int i = 0;i<arr.length;i++) {
System.out.println(Arrays.toString(arr[i]));
}
//5、定义一个最大值max和最小值min,以及最大值的x和y,以及最小值的x和y
int max = Integer.MIN_VALUE;//比0小的数值;
int min = Integer.MAX_VALUE;//比1000大的数值;
int maxX = 0,maxY = 0,minX = 0,minY = 0;
//6、对二维数组进行遍历,遍历的过程中,拿出每个元素来跟max和min进行比较
//如果元素比max大,则把元素赋值给max,并且把元素的i和j分别赋值给x和y,如果元素比min小,则同理;
for(int i = 0;i<arr.length;i++) {
for(int j = 0;j<arr[i].length;j++) {
if(arr[i][j]>max) {
max = arr[i][j];
maxX = i;
maxY = j;
}
if(arr[i][j]<min) {
min = arr[i][j];
minX = i;
minY = j;
}
}
}
//7、测试我们获取到的max和min是否对
System.out.println("max:"+max+",maxX:"+maxX+",maxY:"+maxY);
System.out.println("min:"+min+",minX:"+minX+",minY:"+minY);
//8、交换这两个最大值和最小值的位置即可
arr[maxX][maxY] = min;
arr[minX][minY] = max;
//9、输出交换完位置的二维数组
System.out.println("---------------------------------------------");
for(int i = 0;i<arr.length;i++) {
System.out.println(Arrays.toString(arr[i]));
}
}

我要回帖

更多关于 怎样获取二维数组中一维数组的个数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信