C 复数三维阵列

C 复数三维阵列,c,multidimensional-array,complex-numbers,C,Multidimensional Array,Complex Numbers,如何在C中动态定义复数的三维数组,以便访问方便访问数组的[I][j][k]符号?您可以使用VLA,例如: #include <stdio.h> #include <complex.h> int main(void) { size_t n = 2, m = 3, o = 4; double complex a[n][m][o]; a[1][2][3] = 1.0 + 0.5*I; print

如何在C中动态定义复数的三维数组,以便访问方便访问数组的
[I][j][k]
符号?

您可以使用VLA,例如:

#include <stdio.h>
#include <complex.h>

int main(void) {
    size_t n = 2,
           m = 3,
           o = 4;

    double complex a[n][m][o];

    a[1][2][3] = 1.0 + 0.5*I;

    printf("%f + %fi\n", creal(a[1][2][3]), cimag(a[1][2][3]));
    return 0;
}
#包括
#包括
内部主(空){
尺寸n=2,
m=3,
o=4;
双络合物a[n][m][o];
a[1][2][3]=1.0+0.5*I;
printf(“%f+%fi\n”、creal(a[1][2][3])、cimag(a[1][2][3]);
返回0;
}

您可以使用VLA,例如:

#include <stdio.h>
#include <complex.h>

int main(void) {
    size_t n = 2,
           m = 3,
           o = 4;

    double complex a[n][m][o];

    a[1][2][3] = 1.0 + 0.5*I;

    printf("%f + %fi\n", creal(a[1][2][3]), cimag(a[1][2][3]));
    return 0;
}
#包括
#包括
内部主(空){
尺寸n=2,
m=3,
o=4;
双络合物a[n][m][o];
a[1][2][3]=1.0+0.5*I;
printf(“%f+%fi\n”、creal(a[1][2][3])、cimag(a[1][2][3]);
返回0;
}
扩展在堆上而不是堆栈上分配数组:

#include <stdlib.h>
#include <stdio.h>
#include <complex.h>


int main(void) 
{
  size_t n = 2, m = 3, o = 4;

  double complex (*pa)[n][m][o] = malloc(sizeof *pa);
  if (NULL == pa)
  {
    perror("malloc() failed");
    exit(EXIT_FAILURE);
  }

  (*pa)[1][2][3] = 1.0 + 0.5*I;

  printf("%f + %fi\n", creal((*pa)[1][2][3]), cimag((*pa)[1][2][3]));

  free(pa);

  return EXIT_SUCCESS;
}
#包括
#包括
#包括
内部主(空)
{
尺寸n=2,m=3,o=4;
双络合物(*pa)[n][m][o]=malloc(sizeof*pa);
如果(NULL==pa)
{
perror(“malloc()失败”);
退出(退出失败);
}
(*pa)[1][2][3]=1.0+0.5*I;
printf(“%f+%fi\n”)、creal((*pa)[1][2][3])、cimag((*pa)[1][2][3]);
免费(pa);
返回退出成功;
}
扩展在堆上而不是堆栈上分配数组:

#include <stdlib.h>
#include <stdio.h>
#include <complex.h>


int main(void) 
{
  size_t n = 2, m = 3, o = 4;

  double complex (*pa)[n][m][o] = malloc(sizeof *pa);
  if (NULL == pa)
  {
    perror("malloc() failed");
    exit(EXIT_FAILURE);
  }

  (*pa)[1][2][3] = 1.0 + 0.5*I;

  printf("%f + %fi\n", creal((*pa)[1][2][3]), cimag((*pa)[1][2][3]));

  free(pa);

  return EXIT_SUCCESS;
}
#包括
#包括
#包括
内部主(空)
{
尺寸n=2,m=3,o=4;
双络合物(*pa)[n][m][o]=malloc(sizeof*pa);
如果(NULL==pa)
{
perror(“malloc()失败”);
退出(退出失败);
}
(*pa)[1][2][3]=1.0+0.5*I;
printf(“%f+%fi\n”)、creal((*pa)[1][2][3])、cimag((*pa)[1][2][3]);
免费(pa);
返回退出成功;
}

这里“
i
j
表示复数的实部和虚部,对吗?No[i][j][k]是3D数组的三个索引。假设要访问数组A的第一个元素,那么我将把它索引为[0][0][0]。这里“
I
j
表示复数的实部和虚部,对吗?否[I][j][k]是3D数组的三个索引。假设我想访问数组A的第一个元素,那么我将把它作为[0][0][0]进行索引。谢谢你的回答:)我的代码中正好有这种风格,它适用于小数组,但我说的是非常大的数组,然后我就得到了分段错误(核心转储)错误:(谢谢你的回答:)我的代码中正好有这种风格,它适用于小数组,但我说非常大的数组,然后我最终得到分段错误(核心转储)错误:(感谢答案:)这似乎对我有效我会尝试:)谢谢答案:)这似乎对我有效我会尝试:)