gpt4 book ai didi

c - 在 C 中分配矩阵

转载 作者:行者123 更新时间:2023-11-30 18:33:35 25 4
gpt4 key购买 nike

我目前正在尝试学习和理解 C,但我一直停留在理解指针上。

对于分配,我们必须按如下方式分配矩阵:

int main(){

int *mat = (int *)malloc(rows * cols * sizeof(int));
}

但是我不明白为什么这比使用简单数组有任何优势。

我将如何处理这个矩阵?它有什么优点?

最佳答案

What are the advantages to it?

它们之间有很多区别,但最大的区别之一是堆栈通常限制为 1MB 或 8MB。因此,如果您尝试声明该大小的数组,程序可能会崩溃。使用动态内存,分配数百 MB 或更多并不奇怪。

另一个很大的区别是您可以返回指向动态分配的内存的指针。这不适用于数组。

// Dummy init function
void init(int * arr, size_t size)
{
for(int i=0; i<size; i++) arr[i] = i;
}

// Will compile, but the program will behave strange. Accessing a variable
// after it has gone out of scope causes undefined behavior.
int * returnArray()
{
int arr[10];
init(arr, 10);
return arr;
}

// Works perfectly;
int * returnMallocatedArray()
{
int * arr = malloc(10*sizeof(*arr));
init(arr, 10);
return arr;
}

How would I handle this matrix?

就像常规数组一样。您可以使用 mat[x+y*rows] 或任何最适合您需要的内容来访问元素 (x,y)。但请记住,就编译器和运行时环境而言,mat 的唯一作用是指向内存块的指针。由您来进行映射。只要不混合使用 mat[x*cols+y] 之类的操作也可以。

关于c - 在 C 中分配矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56619256/

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