【发布时间】:2021-01-19 22:26:24
【问题描述】:
#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");
}
}
在 dev c++ 中,此代码按我的意愿正确运行,但它来了
- return 使指针从整数不进行强制转换 -> return *b;
- 赋值从没有强制转换的指针生成整数 -> **trans_matrix = transpose(matrix[0], trans_matrix[0], r, c); 警告。
如何修复我的代码不显示警告?
【问题讨论】:
-
您在单机环境中使用微控制器工作?如果没有,对于初学者C11 Standard - §5.1.2.2.1 Program startup(p1) 适用。另请参阅:What should main() return in C and C++?。此外,
b已经是指向int的指针。 C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3) 所以试图返回*b试图返回类型int。 -
在编译时,始终启用警告,然后修复这些警告。 (对于
gcc,至少使用:-Wall -Wextra -Wconversion -pedantic -std=gnu11)注意:其他编译器使用不同的选项来产生相同的结果。通过编译器传递 OPs 代码会导致 4 个主要警告。你需要修复这些警告,事实上,编译的结果不是你想要的。 -
OT:关于:
void main(void){根据 C 标准,main()只有 2 个有效签名。它们是:int main( void )和int main( int argc, char *argv[])
标签: c