前言:
现时朋友们对“数组对角线求和c语言”大体比较珍视,小伙伴们都需要学习一些“数组对角线求和c语言”的相关资讯。那么小编同时在网摘上搜集了一些关于“数组对角线求和c语言””的相关内容,希望看官们能喜欢,大家快快来学习一下吧!二维数组应该是一种最常用的数据结构了,二维相对一维,确实复杂了不只一个维度。
二维数组是数组的数组,其元素是一个数组,如果用指针指向,需要有长度信息,才可以用正常的指针算术运算(元素指针偏移)。
1 行序优先、列序优先,倒序处理,对角线数据处理
#include <stdio.h>#include <stdlib.h>int main(){ int i,j; int row = 3; const int COL = 4; int arr[][COL] = {1,2,3,4,5,6,7,8,9,10,11,12}; for(i=0;i<row;i++) // 行序优先 { for(j=0;j<COL;j++) printf("%2d ",arr[i][j]); printf("\n"); } for(i=0;i<COL;i++) // 列序优先 { for(j=0;j<row;j++) printf("%2d ",arr[j][i]); printf("\n"); } for(i=row-1;i>=0;i--) // 倒序输出 { for(j=COL-1;j>=0;j--) printf("%2d ",arr[i][j]); printf("\n"); } int sum = 0; for(i=0;i<row;i++) // 对角线数据求和 { sum += arr[i][i] + arr[i][row-i-1]; } printf("%d\n",sum); getchar(); return 0;}/*output: 1 2 3 4 5 6 7 8 9 10 11 12 1 5 9 2 6 10 3 7 11 4 8 1212 11 10 9 8 7 6 5 4 3 2 136*/2 二维指针处理二维数组
首先需要注意的是,二维指针的解引用是一个指针,二维数组名的元素是一个有长度信息的数组,二者不具有等同性,可以有关联性。
#include <stdio.h>#include <stdlib.h>#define COL 4int** func2P(int row){ int i,j; int**pp = (int**)malloc(sizeof(int*)*row); for(i=0;i<row;i++) pp[i] = (int*)malloc(sizeof(int)*COL); for(i=0;i<row;i++) for(j=0;j<COL;j++) pp[i][j] = (i+1)*(j+1); return pp;}int main(){ int row = 3; int**arr = func2P(row); for(int i=0;i<row;i++) { for(int j=0;j<COL;j++) printf("%2d ",arr[i][j]); printf("\n"); } free(arr); getchar(); return 0;}/*output: 1 2 3 4 2 4 6 8 3 6 9 12*/3 数组指针处理二维数组
#include <stdio.h>#include <stdlib.h>#define COL 4int(*funcArr2D(int row))[COL] // 返回一个数组指针{ int (*buf)[COL]; buf = (int(*)[COL])malloc(row*COL*sizeof(int)); // malloc(row); ? for(int i=0;i<row;i++) for(int j=0;j<COL;j++) buf[i][j] = (i+1)*(j+1); return buf;}int main(){ int row = 3; int(*arr)[4] = funcArr2D(row); for(int i=0;i<row;i++) { for(int j=0;j<COL;j++) //printf("%2d ",arr[i][j]); printf("%2d ",*(*(arr+i)+j)); printf("\n"); } free(arr); getchar(); return 0;}/*output: 1 2 3 4 2 4 6 8 3 6 9 12*/
如果是C++,也可以使用数组指针获得一个二维数组:
void test(){ int (*a)[6] = new int[5][6]; for(int i=0;i<5;i++) for(int j=0;j<6;j++) a[i][j] = (i+1)*(j+1);}4一维数组和二维数组相互赋值
内存本质上是一个顺序存储的线性字节数组。二维数组只是逻辑上的概念,本质上是数组的数组。
#include <stdio.h>#include <stdlib.h>#define COL 4int(*funcArr2D(int row))[COL]{ int (*buf)[COL]; buf = (int(*)[COL])malloc(row*COL*sizeof(int)); // malloc(row); ? for(int i=0;i<row;i++) for(int j=0;j<COL;j++) buf[i][j] = (i+1)*(j+1); return buf;}int* func1P(int row){ int* p = (int*)malloc(sizeof(int)*row*COL); for(int i=0;i<row*COL;i++) p[i] = i+1; return p;}int main(){ int row = 3; int(*arr2)[4] = funcArr2D(row); int* arr1 = func1P(row); for(int i=0;i<row*COL;i++) arr2[i/COL][i%COL] = arr1[i]; for(i=0;i<row;i++) { for(int j=0;j<COL;j++) printf("%2d ",arr2[i][j]); printf("\n"); } free(arr2); free(arr1); getchar(); return 0;}/*output: 1 2 3 4 2 4 6 8 3 6 9 12*/5 使用指针数组处理二维数组
#include <stdio.h>int main(){ int b[2][3]= {{1,2,3},{2,4,6}}; int *pb[2]; int i,j; pb[0]=b[0]; pb[1]=b[1]; for(i=0; i<2; i++) { for(j=0; j<3; j++,pb[i]++) printf("%2d",*pb[i]); printf("\n"); } return 0;}
-End-
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #数组对角线求和c语言