文章目录
- 前言
- 一、二维数组的初始化
- 1.初始化方式
- 2.二维数组初始化特性
- 二、矩阵转置
前言
本文章是指针学习的先导知识,对于理解指针与数组间的关系有重要作用
提示:以下是本篇文章正文内容,下面案例可供参考
一、二维数组的初始化
1.初始化方式
1)由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
2)为了更直观地表示元素的分布,可以用大括号将每一行的元素括起来:
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
//或者
int a[3][4] = {
{1,2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
示例代码:
运行结果:
二维数组内容可视化:
2.二维数组初始化特性
1)二维数组也可以仅对部分元素赋初值:
int a[3][4] = {{1}, {5}, {9}};
2)如果希望整个二维数组初始化为同一个数,那么直接在大括号里写一个数即可:
//将数组元素全部初始化为0
int a[3][4] = {0};
3)指定初始化的元素,只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为0:
int a[3][4] = {[0][0] = 1, [1][1] = 2, [2][2] = 3};
4)第1维的元素个数可以不写,其他维度必须写上:
int a[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11,12}};
二、矩阵转置
代码:
#include <stdio.h>
int main() {
int c[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("\n*******************************\n转置前:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf(" b[%d][%d] = %d ", i, j, c[i][j]);
}
printf("\n");
}
//输出转置:将i和j的值进行交换后,再将c[i][j]变为c[j][i]
printf("\n*******************************\n转置后:\n");
printf("\n*******************************\n");
for(int i=0;i<4;i++){
for(int j=0;j<3;j++){
printf(" b[%d][%d] = %d ",i,j,c[j][i]);
}
printf("\n");
}
return 0;
}
此处效果相当于将矩阵逆时针旋转90°
运行结果:
*******************************
转置前:
b[0][0] = 1 b[0][1] = 2 b[0][2] = 3 b[0][3] = 4
b[1][0] = 5 b[1][1] = 6 b[1][2] = 7 b[1][3] = 8
b[2][0] = 9 b[2][1] = 10 b[2][2] = 11 b[2][3] = 12
*******************************
转置后:
*******************************
b[0][0] = 1 b[0][1] = 5 b[0][2] = 9
b[1][0] = 2 b[1][1] = 6 b[1][2] = 10
b[2][0] = 3 b[2][1] = 7 b[2][2] = 11
b[3][0] = 4 b[3][1] = 8 b[3][2] = 12