#include<stdio.h>
#include<stdlib.h>
int **transpose(int a[], int b[], int raw, int column){
int i, j;
for(i=0; i < raw ; i++)
for(j=0; j < column ; j++)
*(b+(j*raw + i)) = *(a+(i*column + j));
return *b;
}
int **mk_matrix(int raw, int col){
int i;
int **matrix = (int**)malloc(sizeof(int*)*raw);
matrix[0] = (int*)malloc(sizeof(int)*(raw*col));
for(i=1 ; i < raw ; i++)
matrix[i] = matrix[i-1] + col;
return matrix;
}
void main(void){
int r, c, i, j;
printf("Input the size of matrix : ");
scanf("%d %d", &r, &c);
int **matrix = mk_matrix(r, c);
int **trans_matrix = mk_matrix(c, r);
printf("Input elements of the %dx%d matrix : ", r, c);
for(i=0; i < r ; i++)
for(j=0; j < c ; j++)
scanf("%d", &matrix[i][j]);
**trans_matrix = transpose(matrix[0], trans_matrix[0], r, c);
for(i=0; i < c ; i++){
for(j=0; j < r ; j++)
printf("%d ", trans_matrix[i][j]);
printf("\n");
}
}
如何修复代码未显示警告?
你不需要
返回*B
int**转置(int A[],int B[],int raw,int column)
void transpose(int a[], int b[], int raw, int column){
int i, j;
for(i=0; i < raw ; i++)
for(j=0; j < column ; j++)
*(b+(j*raw + i)) = *(a+(i*column + j));
}
指针变量数据类型的强制转换 必须显式强制类型转换,不允许隐式类型转换 指向空间的强制类型转换,本质上就是普通变量的强制类型转换 int a = 10; float b = 3.14; int *pa = &a; float *pb = &b; *pa = (int)*pb; // 等价于 a = (int)b; 指针本身强制类型转换,改变的是对其指向空间的引用方式(空间大小和存储结构) int
假设代码是用c11编译的,并且启用了严格别名。 我不是在寻找一种不同的方法,我想专注于这个具体的问题,以及它是否可行或为什么不可行。 (如果我无意中犯了一些无关的错误,请告诉我,我会改正的) C11标准说: 6.2.5.28所有指向结构类型的指针应具有彼此相同的表示和对齐要求。 6.7.2.1.6结构是由成员序列组成的类型,其存储按有序顺序分配 这意味着结构A和B中指针的大小和对齐方式相同。 结构
指向指针的指针是多个间接或指针链的形式。 通常,指针包含变量的地址。 当我们定义指向指针的指针时,第一个指针包含第二个指针的地址,它指向包含实际值的位置,如下所示。 必须声明一个指向指针的指针的变量。 这是通过在其名称前面放置一个额外的星号来完成的。 例如,以下是声明指向int类型指针的指针的声明 - int **var; 当目标值由指针指向间接指向时,访问该值需要应用星号运算符两次,如下例所示
指向指针的指针是多个间接或指针链的形式。 通常,指针包含变量的地址。 当我们定义指向指针的指针时,第一个指针包含第二个指针的地址,它指向包含实际值的位置,如下所示。 必须声明一个指向指针的指针的变量。 这是通过在其名称前面放置一个额外的星号来完成的。 例如,以下是声明指向int类型指针的指针的声明 - int **var; 当目标值由指针指向间接指向时,访问该值需要应用星号运算符两次,如下例所示
公有派生类的对象可作为其相应基类的对象处理,这使得一些有意义的操作成为可能。例如,从某个特定基类派生出来的各种类,尽管这些类的对象彼此之间互不相同,但是仍然能够建立这些对象的链表,只要把这些对象作为基类对象处理就可以了。然而反过来是不行的,基类的对象不能自动成为派生类的对象。 常见编程错误 9.1 将基类对象作为派生类对象处理。 程序员可以用显式类型转换把基类指针强制转换为派生类指针。但是,如果要
考虑以下代码: 我必须定义一个回调函数,我想在该函数中使用一些附加信息。我定义了自己的结构并将成员的地址传递给函数。在函数中,我想通过强制转换“检索”整个结构,但指针似乎不匹配,我得到了错误的结果。我想我在选演员时做错了什么,但我不确定是什么?