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
s
p
本身是一个指针,但它指向的是整数。现在将该方法用于二维数组,
intm[5][5]
M
的元素是五个整数的数组。指向该数组的指针是
int(*P)[5]
。(这种语法首先需要一些习惯。)
P
指向一个包含五个整数的数组,并且
M[0]
P[0]
访问矩阵的第一行。为了获得该行某列中的整数,必须提供第二个索引:
M[0][i]
P[0][j]
是相同的整数。
int temp = shape[i][j];