c - C中动态分配的二维( double )数组

标签 c arrays multidimensional-array

我正在尝试动态分配所有元素都为双倍的二维数组 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/

相关文章:

java - 如何将其变成帕斯卡三角形而不是直角三角形?

C++ 如何声明指向二维数组的指针

C 字符串文字 "too big for character"

R包lda中折叠的吉布斯采样

c++ - 将 int 转换为字符串数组

c - char 指针的动态数组

c - OpenMP 中的错误,试图为循环向量化矩阵乘法

c - 枚举数据类型转换为int类型?

java - 创建列表数组

c - 将多种类型的值传递给函数