c - 在 C 中分配矩阵
问题描述
我目前正在尝试学习和理解 C,但我一直在理解指针。
对于分配,我们必须按如下方式分配矩阵:
int main(){
int *mat = (int *)malloc(rows * cols * sizeof(int));
}
但是我不明白为什么这会比使用简单数组带来任何好处。
我将如何处理这个矩阵?它有什么优势?
解决方案
它有什么优势?
这些之间有很多区别,但最大的区别之一是堆栈通常限制为 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;
}
我将如何处理这个矩阵?
就像一个常规数组一样。您可以使用类似mat[x+y*rows]
或最适合您需要的任何内容访问元素 (x,y)。不过请记住,就编译器和运行时环境而言,唯一的就是mat
指向一块内存的指针。由你来做映射。mat[x*cols+y]
只要你不混合它们,做类似的事情也可以。
推荐阅读
- algorithm - 整数除法算法:关于 Wiki 版本的问题
- php - 在 laravel 8 中设置单元测试环境
- python - Boto3 get_products 定价为某些实例类型返回 0.00 美元
- vue.js - 在 vue 计算属性中使用对象解构
- c++ - 为什么`std::unordered_map::erase(key_type const&)`返回删除元素的数量?
- python - or and and 语句的优先级
- google-tag-manager - 正则表达式表查找不适用于 Click Element 变量
- python - 是否可以在 Python 中使用连字符/破折号作为变量
- boolean - 如果第一个返回 false,布尔和语句停止的词是什么?
- r - 为回归创建基线变量