标题:二维数组变量赋值二维数组内存
只看楼主
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
结帖率:86.67%
已结贴  问题点数:20 回复次数:8 
二维数组变量赋值二维数组内存
程序代码:
int col;
    int row;
    
    float f[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };

    col = 4;
    row = 4;
    
    // 申请内存
    float** Rmatrix = (float**)malloc(sizeof(float*) * col);
    for (int i = 0; i < col; i++) {
        Rmatrix[i] = (float*)malloc(sizeof(float) * row);
    }
    // 赋值
    Rmatrix = f;

    for (int i = 0; i < col; i++) {
        for (int j = 0; j < row; j++) {            
            printf(" %f ", Rmatrix[i][j]);
        }
        putchar('\n');
    }

错误如下:

使用VS2019写的,
请问为什么呢?
搜索更多相关主题的帖子: float 二维数组 赋值 int row 
2020-06-24 09:59
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:4 
Rmatrix 是指向 已经申请内存 的指针, 所以不应该去修改指针的指向,应该去修改指针指向的“内容”
程序代码:
#include<stdio.h>
#include <stdlib.h>
int main()
{
    int col;
    int row;

    float f[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };

    col = 4;
    row = 4;

    // 申请内存
    float** Rmatrix = (float**)malloc(sizeof(float*) * col);
    for (int i = 0; i < col; i++) {
        Rmatrix[i] = (float*)malloc(sizeof(float) * row);
    }
    

    for (int i = 0; i < col; i++) {
        for (int j = 0; j < row; j++) {
            // 赋值
            Rmatrix[i][j] = f[i][j];
            printf(" %f ", Rmatrix[i][j]);
            
        }
        //释放
        free(Rmatrix[i]);
        putchar('\n');
    }
    //释放
    free(Rmatrix);
    return 0;
}

2020-06-24 11:04
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:4 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int col, row;
    int i, j;

    float f[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };

    col = 4;
    row = 4;

    // 申请内存
    float** Rmatrix = (float**)malloc(sizeof(float*) * col);
    for (i = 0; i < col; i++)
        *(Rmatrix + i) = (float*)malloc(sizeof(float) * row);


    for (i = 0; i < col; i++)
        memcpy(*(Rmatrix + i), f[i], sizeof(float) * row);


    for (i = 0; i < col; i++)
    {
        for (j = 0; j < row; j++)
        {
            printf(" %g\t", *(*(Rmatrix + i) + j));
        }
        putchar('\n');
    }

    //释放
    for (i = 0; i < col; i++)
        free(*(Rmatrix + i));
    free(Rmatrix);

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-06-24 11:23
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
得分:0 
回复 2楼 fulltimelink;回复 3楼 纯蓝之刃
emm,请问能不能写在一个函数中呢?
就是把二维数组变量写在二维数组内存中。
试过void s(float **a,int col,int row){}
void s(float *a[],int col,int row){}
都不可以。不知道为什么

程序代码:
typedef struct
{
    float** value;
    int col;
    int row;
}Mat;
Mat s(float** m,int col,int row)
{
    Mat r;
    r.col = col;
    r.row = row;

    //// 申请内存
    float** Rmatrix = (float**)malloc(sizeof(float*) * col);
    for (int i = 0; i < col; i++) {
        Rmatrix[i] = (float*)malloc(sizeof(float) * row);
    }

    for (int i = 0; i < col; i++) {
        for (int j = 0; j < row; j++) {
            Rmatrix[i][j] = m[i][j];//这一步出错
        }
    }
    r.value = Rmatrix;
    return r;
}


[此贴子已经被作者于2020-6-24 14:28编辑过]

2020-06-24 14:15
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:4 
Rmatrix[i][j] = *((float*)m + i * row + j);//这一步出错

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-06-24 15:02
Mchen2000
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-6-24
得分:0 
小白改怎么学习
2020-06-24 15:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:4 
#include <stdio.h>
#include <stdlib.h>

float* s(float** m, int row, int col)
{
    int n = row*col;
    float* f = (float*)malloc(n*sizeof(float));
    float* p = (float*)m;
    float* ret = f;
    int i;
    for (i=0; i<n; ++i)
       *f++ = *p++;
    return ret;
}

int main()
{
    int col, row;
    int i, j;

    float f[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };

    col = 4;
    row = 4;

    float* m = s((float**)f, row, col);
   
    for (i=0; i<row; ++i)
    {
        for (j=0; j<col; j++)
        {
            printf(" %g\t", *(m+col*i+j));
        }
        putchar('\n');
    }

    //释放
    free(m);

    return 0;
}
2020-06-24 15:28
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:4 
二维数组和二级指针完全是两回事
函数传入二维数组不能用二级指针做形参
实践中 常见实现是用一级指针传递二维数组
void s(float* arr, int col, int row);
float arr[4][4];
s(*arr, 4, 4);

https://zh.
2020-06-24 16:34
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
得分:0 
感谢
2020-06-24 18:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502266-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.226397 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved