⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

指针的指针实现动态二维矩阵与内存碎片规避

深入指针的二级间接访问,探讨如何用int **管理不规则二维数组,并对比与一维数组模拟二维数组的内存碎片差异。 · 难度:入门 · +10XP

指针的指针与动态矩阵

常规的二维数组在栈上分配连续内存,但遇到不规则行宽(如三角形矩阵)时浪费空间。本教程使用int **p = malloc(rows * sizeof(int*)),再为每行分配不同长度,并讲解为何这种方式可能导致内存碎片。通过对比连续分配一维大数组与二级指针分配,分析cache命中率与malloc开销。

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

int main() { int rows = 3; int **matrix = malloc(rows * sizeof(int*)); int sizes[] = {2, 4, 3}; for (int i = 0; i < rows; i++) { matrix[i] = malloc(sizes[i] * sizeof(int)); for (int j = 0; j < sizes[i]; j++) matrix[i][j] = i * 10 + j; } // 打印 for (int i = 0; i < rows; i++) { for (int j = 0; j < sizes[i]; j++) printf("%d ", matrix[i][j]); printf(" "); } // 释放 for (int i = 0; i < rows; i++) free(matrix[i]); free(matrix); return 0; }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 105 篇
0 完成
🔥 0