我正在尝试动态分配所有元素都为双倍的二维数组 N+1xN。然后我想为数组的每个元素设置值 (1.6)。最后一步是打印这个数组。 我的功能
void inic(double **t)
{
for(int y=0;y<N;y++)
{
for(int x=0;x<N+1;x++)
{
t[x][y]=1.5;
}
}
}
没有正常工作,我不知道为什么。
例如(对于 n=3)结果是:
[0][0][0][0]
[0][0][0][0]
[0][0][0][0]
我预计:
[1.6][1.6][1.6][1.6]
[1.6][1.6][1.6][1.6]
[1.6][1.6][1.6][1.6]
[1.6][1.6][1.6][1.6]
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int N;
void inic(double **t)
{
for(int y=0;y<N;y++)
{
for(int x=0;x<N+1;x++)
{
t[x][y]=1.5;
}
}
}
void print(double **t)
{
for(int y=0;y<N;y++)
{
for(int x=0;x<N+1;x++)
{
printf("%i ",t[x][y]);
}
printf("\n");
}
}
int main()
{
double **t;
N=3;
t=malloc((N+1)*sizeof(double*));
for(int i=0;i<N+1;i++)
{
t[i]=malloc(N*sizeof(double));
}
inic(t);
print(t);
printf("\n");
}
最佳答案
您使用的转换说明符不正确。尝试以下操作
printf("%lf ",t[x][y]);
此外,使用另一种索引顺序会更自然,即 这个声明
t=malloc((N)*sizeof(double*));
分配N个“行”,然后在循环中分配N + 1个“列”
for(int i=0;i<N;i++)
{
t[i]=malloc( ( N + 1 )*sizeof(double));
}
在这种情况下,其他函数看起来像
void inic(double **t)
{
for(int x = 0; x < N; x++)
{
for( int y = 0; y < N + 1; y++ )
{
t[x][y]=1.5;
}
}
}
void print(double **t)
{
for( int x = 0; x < N; x++ )
{
for( int y = 0; y < N + 1; y++)
{
printf("%lf ",t[x][y]);
}
printf("\n");
}
}
此外,您还应该在程序结束时释放所有分配的内存。
关于c - C中动态分配的二维( double )数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43456240/