C编译器警告:来自不兼容指针类型的赋值
这是我的学校项目,我只做骨架,但编译器说 [警告]来自不兼容指针类型的分配 我换了一些指针,但没用。有人能帮我吗C编译器警告:来自不兼容指针类型的赋值,c,arrays,pointers,C,Arrays,Pointers,这是我的学校项目,我只做骨架,但编译器说 [警告]来自不兼容指针类型的分配 我换了一些指针,但没用。有人能帮我吗 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int *col_num, *row_num, **matrix; double k, l; int i, j; printf("Enter your column numbe
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *col_num, *row_num, **matrix;
double k, l;
int i, j;
printf("Enter your column number:\n");
scanf("%d", &col_num);
printf("Enter your row number:\n");
scanf("%d", &row_num);
matrix[*col_num] = (int **) malloc(*col_num * sizeof(int));
if (matrix[*col_num] == NULL)
printf("No free Memory!");
matrix[*row_num] = (int **) malloc(*row_num * sizeof(int));
if (matrix[*row_num] == NULL)
printf("No free Memory!");
for (i = 0; i < *col_num; i++)
for (j = 0; j < *row_num; j++)
{
printf("Please Enter %d%d matrix:", i + 1, j + 1);
scanf("%lf", &matrix[i][j]);
}
for (i = 0; i < *col_num; i++)
{
for (j = 0; j < *row_num; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
free(matrix);
return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
整数*列数,*行数,**矩阵;
双k,l;
int i,j;
printf(“输入列号:\n”);
scanf(“%d”和列数);
printf(“输入您的行号:\n”);
scanf(“%d”,行数(&U);
矩阵[*col_num]=(int**)malloc(*col_num*sizeof(int));
if(矩阵[*col_num]==NULL)
printf(“没有可用内存!”);
矩阵[*行数]=(int**)malloc(*行数*大小(int));
if(矩阵[*行数]==NULL)
printf(“没有可用内存!”);
对于(i=0;i<*col_num;i++)
对于(j=0;j<*行数;j++)
{
printf(“请输入%d%d矩阵:”,i+1,j+1);
scanf(“%lf”和矩阵[i][j]);
}
对于(i=0;i<*col_num;i++)
{
对于(j=0;j<*行数;j++)
{
printf(“%d”,矩阵[i][j]);
}
printf(“\n”);
}
自由(矩阵);
返回0;
}
首先,在这一部分:
int *col_num, *row_num, **matrix;
printf("Enter your column number:\n");
scanf("%d", &col_num);
printf("Enter your row number:\n");
scanf("%d", &row_num);
col_num
和row_num
不应该是指针,您可以这样做:
int col_num, row_num, **matrix;
printf("Enter your column number:\n");
scanf("%d", &col_num);
printf("Enter your row number:\n");
scanf("%d", &row_num);
此外,检查scanf()
的返回值也不是一个坏主意,以防用户输入一些垃圾
您似乎还在程序中编写了很多类似于matrix[*row_num]=../
的东西,这是不必要的。您不应该在任何地方引用*行数
和*列数
。相反,只需自己调用row_num
和col_num
,这应该没问题
如果您想使用**matrix
,这在一开始很难使用,那么您需要小心地使用它来完成此任务。请看
首先从以下方面开始:
- 为行分配内存:
int **matrix = malloc(row_num * sizeof(*matrix)); /* check return value */
- 然后,对于每一行,
malloc()
for (i = 0; i < row_num; i++) { matrix[i] = malloc(col_num * sizeof(*matrix[i])); /* check return value */
#包括
#包括
int
main(int argc,char*argv[]){
int row_num,col_num,**矩阵;
int i,j;
printf(“输入列号:”);
如果(scanf(“%d”,&col_num)!=1){
printf(“无效输入\n”);
退出(退出失败);
}
printf(“输入行号:”);
如果(scanf(“%d”,&row_num)!=1){
printf(“无效输入\n”);
退出(退出失败);
}
矩阵=malloc(row_num*sizeof(*matrix));/*或sizeof(int*)*/
if(!矩阵){
printf(“无法为指针分配内存。\n”);
退出(退出失败);
}
对于(i=0;i
包括行号在内的全部错误是什么?scanf(“%lf”、&matrix[i][j])代码>:%lf
-->%d
还有矩阵的分配错误您在想什么矩阵[*col_num]=(int**)malloc(*col_num*sizeof(int))
Dos?您应该获得有关变量指针和地址的基本知识row_num
和col_num
是使用scanf(“%d”和&col_num)指向int的(未初始化)指针代码>将输入值指定为其指向的地址。(请记住:您没有在那里分配内存)然后您取消引用col_num
:matrix[*col_num]=(int**).
I second@Gerhardh。从一个非常简单的程序开始,它从标准输入读取一个int并打印它。然后才进入一维数组。确保你明白这一点。然后再继续(实现的各种方法)二维数组。
free(matrix[i]);
free(matrix);
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[]) {
int row_num, col_num, **matrix;
int i, j;
printf("Enter your column number: ");
if (scanf("%d", &col_num) != 1) {
printf("Invalid input\n");
exit(EXIT_FAILURE);
}
printf("Enter your row number: ");
if (scanf("%d", &row_num) != 1) {
printf("Invalid input\n");
exit(EXIT_FAILURE);
}
matrix = malloc(row_num * sizeof(*matrix)); /* Or sizeof(int *) */
if (!matrix) {
printf("Cannot allocate memory for pointer.\n");
exit(EXIT_FAILURE);
}
for (i = 0; i < row_num; i++) {
matrix[i] = malloc(col_num * sizeof(*matrix[i])); /* Or sizeof(int) */
if (!matrix[i]) {
printf("Cannot allocate memory for pointer.\n");
exit(EXIT_FAILURE);
}
for (j = 0; j < col_num; j++) {
printf("Please Enter %d%d matrix: ",i+1,j+1);
if (scanf("%d", &matrix[i][j]) != 1) {
printf("Invalid input\n");
exit(EXIT_FAILURE);
}
}
}
printf("Your 2D array:\n");
for (i = 0; i < row_num; i++) {
for (j = 0; j < col_num; j++) {
printf("%d ", matrix[i][j]);
}
free(matrix[i]);
matrix[i] = NULL;
printf("\n");
}
free(matrix);
matrix = NULL;
return 0;
}