C语言入门者求助:如何用最少代码行数创建N×N零矩阵
生成N×N零矩阵的简洁C语言实现
嘿,作为从MATLAB转过来的C语言初学者,我完全懂你想要像zeros(N)那样一行搞定的爽感!在C里其实也有几种超简洁的实现方式,根据你的N是编译期固定还是运行时可变,我给你分情况说:
情况1:N是编译期已知的常量
如果你的N是固定值(比如你提前知道要生成5×5的矩阵),那一行代码就能搞定:
int matrix[N][N] = {0};
C语言的规则是:当你用{0}初始化数组时,所有未明确赋值的元素都会自动被初始化为0,完美实现零矩阵,和MATLAB的zeros(N)一样省心!
情况2:N是运行时输入的变量
如果N需要程序运行时由用户输入或者动态确定,那我们可以用动态内存分配,这里推荐用calloc(它会自动把分配的内存初始化为0,比malloc+memset少写一行),两行就能搞定:
int **matrix = calloc(N, sizeof(int*)); for(int i=0; i<N; matrix[i++] = calloc(N, sizeof(int)));
要是追求极致的行数,甚至可以把逻辑压缩得更紧凑(虽然可读性稍微降一点,但确实更短):
int **matrix = calloc(N, sizeof(int*)); for(int i=0; i<N; matrix[i++] = calloc(N, sizeof(int)));
哦对了,用完动态分配的矩阵别忘了用循环free每个子数组再free主数组,避免内存泄漏哦!
额外小技巧:用一维数组模拟二维矩阵
如果不想搞二级指针,也可以用一维数组模拟,同样一行分配+初始化:
int *matrix = calloc(N*N, sizeof(int));
访问的时候用matrix[i*N + j]来代替matrix[i][j],也能实现零矩阵,代码更短!
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

