Arrays ';calloc';关于二维数组';不能正确初始化
我试图用C语言定义一个函数来返回一个方阵(NxN):Arrays ';calloc';关于二维数组';不能正确初始化,arrays,c,matrix,calloc,Arrays,C,Matrix,Calloc,我试图用C语言定义一个函数来返回一个方阵(NxN): #定义真1 #定义false 0 typedef char bool; 类型定义布尔**矩阵; 矩阵分配(整数大小) { 矩阵矩阵=(bool**)malloc(sizeof(bool)*大小); int i; 对于(i=0;i
#定义真1
#定义false 0
typedef char bool;
类型定义布尔**矩阵;
矩阵分配(整数大小)
{
矩阵矩阵=(bool**)malloc(sizeof(bool)*大小);
int i;
对于(i=0;i
但是,calloc()
似乎没有像预期的那样用零初始化“单元”。我被告知calloc
对于初始化是安全的,所以我相信我的逻辑有漏洞。以下是运行这两个功能时的输出(例如,创建9x9矩阵):
分配中的大小错误:
matrix
是指向bool*
的指针,而不是指向bool
避免错误,请将大小设置为取消引用的指针,而不是类型
C中不需要强制转换,应该省略
// too small
// Matrix matrix = (bool **) malloc(sizeof(bool) * size);
Matrix matrix = malloc(sizeof *matrix * size);
#包括
#包括
内部主(内部argc、字符**argv、字符**envp){
int行=3,cols=2,i,j;
char*myName=(char*)calloc(rows*cols,sizeof(char));
char chTemp='a';
//Kh
//艾尔
//身份证
*(我的名字)='K';*(我的名字+1)='h';*(我的名字+2)='a';*(我的名字+3)='l';*(我的名字+4)='i';*(我的名字+5)='d';
对于(i=0;它不是一个“二维”数组。矩阵
是一个指针数组,指向指向bool
的单个和单独的一维指针数组。请参阅使用#包含
以获得标准方式定义的bool
、true
和false
。您可能想了解[在typedefs后面隐藏指针](https://stackoverflow.com/questions/750178/is-it-a-good-idea-to-typedef-pointers
)指针指向指针正是我在代码中所做的,@AndrewHenleAwesome tip,@JonathanLeffler!谢谢。我花了一些时间才理解你的观点,但我明白了……将代码更改为malloc(sizeof(bool*)*size)
(刚刚在sizeof
函数中添加了*
,它工作起来很有魅力!@J.L.Muller:Codingsizeof(bool*)
比sizeof*矩阵
维护成本更高,更难检查,更容易出错。您的选择。
// too small
// Matrix matrix = (bool **) malloc(sizeof(bool) * size);
Matrix matrix = malloc(sizeof *matrix * size);
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp) {
int rows=3, cols=2, i, j;
char *myName = (char *) calloc(rows*cols, sizeof(char));
char chTemp = 'a';
//Kh
//al
//id
*(myName)='K'; *(myName+1)='h'; *(myName+2)='a'; *(myName+3)='l'; *(myName+4)='i'; *(myName+5)='d';
for(i=0; i<rows; i++){
for(j=0; j<cols; j++){
chTemp = *(myName+i*cols+j);
printf("%c", chTemp);
}
printf("\n");
}
return (EXIT_SUCCESS);
}