您的位置:首页 > 其它

C Tricks(二)—— 按块访问二维数组

2016-05-12 22:17 316 查看
int mat[][5] = { { 1, 2, 3, 4, 5 },
{ 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 },
{ 16, 17, 18, 19, 20 },
{ 21, 22, 23, 24, 25 } };


如我们要索引上述二维数组的某一 patch,比如第一行第二列开始的 2 行 3 列的内容,
8, 9, 10; 13, 14, 15


int row = sizeof(mat)/sizeof(mat[0]);           // 行数
int col = sizeof(mat[0])/sizeof(mat[0][0]);     // 列数

int *p = (int *)mat;                            // 二维数组转换为一维

int org_x = 1, org_y = 2;                       // patch 的起始位置

int patch_height = 2, patch_width = 3;          // patch 的大小

int *row_ptr = p + org_x * col + org_y;         // 块的行索引
for (int i = 0; i < patch_height; ++i){
row_ptr += i * col;                         // 当前行,关键步,每次跳一行
for (int j = 0; j < patch_width; ++j)
printf("%d ", *(row_ptr + j));           // 当前元素
putchar('\n');
}


或者这么访问元素:

for (int i = 0; i < patch_height; ++i){
for (int j = 0; j < patch_width; ++j)
printf("%d ", row_ptr[i*col + j]);           // 当前元素
putchar('\n');
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: