gpt4 book ai didi

使用指针创建二维数组

转载 作者:行者123 更新时间:2023-11-30 15:30:03 25 4
gpt4 key购买 nike

我正在尝试使用指针的指针创建一个二维数组,但遇到了困难。当我尝试扫描值以存储在第一个矩阵(第 38 行)时,我的程序崩溃了。我想在 m1[i][j]m1[i][j] == *(*m1+i)+j 的地址中存储一个值正确吗?

我提供了下面的代码(直到崩溃为止)。这里发生了什么?为什么扫描矩阵 1 的输入时会崩溃?

#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

int main() {
//Initializing variables
int i= 0, j = 0, m = 0, n = 0, p = 0, q = 0;
double **m1, **m2, **mr;
//Prompt user to enter dimensions of first matrix.
printf("Enter number of rows and columns of 1st matrix:");
scanf("%d %d",&m,&n); //Scanning user input
//Prompt user to enter dimension of second matrix.
printf("Enter number of rows and columns of 2nd matrix:");
scanf("%d %d",&p,&q); //Scanning input
//Check if cols (matrix 1) and rows (matrix 2) are equal
if(n!=p)
printf("Not possible");
//If M1 cols == M2 rows allocate memory for matrices
else {
m1 = malloc(sizeof(double *) * m);
for( i=0; i < m; i++)
m1[i] = calloc(n, sizeof(double));

m2 = malloc(sizeof(double *) * p);
for( i=0; i < p; i++)
m2[i] = calloc(q, sizeof(double));

mr = malloc(sizeof(double *) * m);
for( i=0; i < m; i++)
mr[i] = calloc(q, sizeof(double));

//Prompt user to enter values for matrix 1
printf("Enter 1st matrix values:");
//For loop for number of rows
for(i=0;i<m;i++) {
//For loop for number of cols
for(j=0;j<n;j++) {
scanf("%lf\t", *(*(m1+i)+j)); //Scanning input
}
}
//Prompt user to enter values for matrix 2
printf("Enter 2nd matrix values:\n");
for(i=0;i<p;i++) {
for(j=0;j<q;j++) {
scanf("%lf", &(*(m2+i)+j)); //Scanning input
}
}

最佳答案

这行不正确:

        scanf("%lf\t", *(*(m1+i)+j)); //Scanning input

*(*(m1+i)+j)的类型是double,而不是double*,这是你需要的对于 scanf

您需要使用

        scanf("%lf\t", *(m1+i)+j); //Scanning input

或者更简单的形式:

        scanf("%lf\t", &m1[i][j]); //Scanning input

您在其他循环中也有类似的错误。

关于使用指针创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25853044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com