gpt4 book ai didi

C11 VLA 矩阵访问

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:17 26 4
gpt4 key购买 nike

C11 允许像这样使用 VLA 数组(和矩阵)

int row = 10;
int col = 10;
double matrix[row][col];

但是如果我只想将矩阵的一行传递给一个函数,我可以使用

matrix[row_selected]

就好像我把矩阵定义为

double **matrix_old_style = (double **)malloc(sizeof(double *) * row);
for(i=0;i<row;i++)
matrix_old_style[i] = (double *)malloc(siezeof(double) * col);

或者 matrix[row_selected] 不是指向正确位置的指针(如 matrix_old_style[row_selected])?

最佳答案

不,二维数组和通过指针指向指针的伪数组根本不一样。

要将 VLA 作为函数参数传递,只需执行以下操作

void foo(size_t n, size_t m, double A[n][m]);

或类似的。请注意大小在数组之前,因此 nm 在该点是已知的。如果您始终如一地使用该概念,编译器将负责索引计算等。

但请注意,通常您不希望分配诸如 auto 变量之类的野兽,因为它们可能会爆炸您的堆栈。更好用

double (*matrix)[col] = malloc(sizeof(double[row][col]));

当你将它传递给一个函数时,这个类型就是编译器重写它的类型,无论如何,当将它用作函数参数时。

关于C11 VLA 矩阵访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com