已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
2天前关闭。
Improve this question
我有一个2D奇数大小的动态数组,我把指向该数组中间元素的指针交给一个函数,在这个函数中我需要访问所有元素。要做到这一点,我引用中间行的第一个元素并对其进行算术运算。不知何故,我没有设法做到这一点与下面的代码。
void spiral(int *center, int odd_size)
{
int * first_elem = center-odd_size/2;
*first_elem =6;
int ** newline = &first_elem;
*(*(newline+1)+2) = 1;
}
1条答案
按热度按时间njthzxwz1#
假设你的矩阵是:
odd_size
xodd_size
数量的元素组成)matrix = new int[odd_size*odd_size]
或matrix = malloc(odd_size*odd_size*sizeof(int))
,或者可能在堆栈上作为int matrix[odd_size][odd_size]
center
指向2D矩阵的中间元素那么第一行上第一个元素的地址将是:
第N行的后续地址计算为:
其中
O <= N < odd_size
访问给定行的任何单个元素很简单:
其中
0 <= C < odd_size
或者更一般地,为了访问矩阵的任何单独的行、列:
如果每个矩阵行都是独立分配的,那么所有的赌注都是无效的。
如果odd_size>= SQRT(MAX_INT)或大于46340,则在计算
odd_size*odd_size/2
时可能出现溢出。在32位体系结构上,您已经接近内存不足了。如果你的矩阵会变得那么大,请确保你考虑到了这一点:其中
intptr_t
通常是从#include <stdint.h>
得到的。或者使用long long
作为强制转换。