C 如何转置指针矩阵
我有一个布局矩阵C 如何转置指针矩阵,c,arrays,pointers,matrix,constants,C,Arrays,Pointers,Matrix,Constants,我有一个布局矩阵 const int boatRect[MAX_BITMAP_SIZE][MAX_BITMAP_SIZE] = { // 5 {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 1, 0, 0} }; 以及带有指向它的指针的结构(矩阵): 然后,我想转置(旋转过程的一部分)结构中的矩阵: void tr
const int boatRect[MAX_BITMAP_SIZE][MAX_BITMAP_SIZE] = { // 5
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 1, 0, 0}
};
以及带有指向它的指针的结构(矩阵):
然后,我想转置(旋转过程的一部分)结构中的矩阵:
void transpose(const int (*shape)[MAX_BITMAP_SIZE]) {
const int *temp;
for(int i = 0; i < MAX_BITMAP_SIZE; i++) {
for(int j = 0; j < i; j++) {
temp = (const int *) shape[i][j]; //Cast to 'const int *' from smaller integer type 'int'
shape[i][j] = shape[j][i]; //Read-only variable is not assignable
shape[j][i] = temp; //Read-only variable is not assignable
}
}
}
void转置(常量int(*shape)[MAX\u位图大小]){
常数int*temp;
对于(int i=0;i
但是我犯了这些错误,我不确定我做错了什么
我试着这样做,在代码中只有一个矩阵,有指向它的指针,并以一种方式旋转这些指针,它们传递旋转的矩阵,而不创建另一个矩阵
那么,如何在位图结构中创建指向常量int矩阵的指针矩阵,然后旋转该指针矩阵(不是int矩阵)?您的矩阵不是“指针矩阵”,即元素为指针的矩阵。这是一个整数矩阵。将其定义为int
数组的数组
const int boatRect[MAX_BITMAP_SIZE][MAX_BITMAP_SIZE] = { ... };
与其他数组一样,它可以表示为指向其第一个元素的指针,在本例中,该元素是MAX\u BITMAP\u SIZE
int的数组
const int (*matrix)[MAX_BITMAP_SIZE];
将其解引用两次将得到一个int
,即给定行和列处的整数值。因此,用于交换的temp
变量应该是int
:
int temp = shape[i][j];
无需铸造!(警告意味着int
s比系统上的指针“窄”,并且您将在作业中丢失信息。)
更改后,第二个错误仍然会存在:您已使矩阵
const
:无法更改const T*
的元素。如果要就地修改矩阵,请不要将其设置为常量。(您仍然可以在访问的函数中本地设置const
,但不要修改它。)您需要将函数签名更改为void transpose(int(*shape)[MAX_BITMAP_SIZE])
有关强制转换的警告将持续存在,但您可以通过更改const int*temp代码>至<代码>常数内部温度我知道原始矩阵不是指针矩阵,但我想有一个指向它的指针矩阵,然后旋转该指针矩阵。你想有一个矩阵,其元素指向原始矩阵的整数元素吗?若你们逆矩阵,你们就交换指针?在我看来,这没有道理。你有一个指向矩阵的指针,所以你的结构只保留了一个指针而不复制整个矩阵。如果通过该指针修改矩阵,则会更改原始矩阵,因为它们是相同的。那么,在内存中只有一个矩阵的最佳方式是什么?因为这是我的目标,否则我就不会弄乱指针,我会照搬你的做法,只是你似乎对指针是什么部分有一个误解:指针是外部的;它不会影响内部部件。以一个简单数组为例:inta=[1,2,3]
。现在定义一个指向它的指针:int*p=a
。a[0]
和p[0]
访问a
的第一个元素,并为p[0]
分配一个新值也将更改基础数组的元素a[0]
。这就是你想要的,对吗?(续)注意这里,a
和p
的元素都是int
sp
本身是一个指针,但它指向的是整数。现在将该方法用于二维数组,intm[5][5]
。M
的元素是五个整数的数组。指向该数组的指针是int(*P)[5]
。(这种语法首先需要一些习惯。)P
指向一个包含五个整数的数组,并且M[0]
和P[0]
访问矩阵的第一行。为了获得该行某列中的整数,必须提供第二个索引:M[0][i]
和P[0][j]
是相同的整数。
int temp = shape[i][j];