yuple___ 2020-04-22 23:12 采纳率: 100%
浏览 795
已采纳

如何解决vs 中warning C4154: 删除数组表达式;转换到提供的指针 ?

1.编写并测试3×3 矩阵转置函数, 使用数组保存3×3 矩阵。
2.使用动态内存分配生成动态数组来重新完成上题( n 阶方阵),使用指针实现函数的功能。

#include<iostream>
using namespace std;
void change(int(*p1)[3]);
int main() {
    int(*p)[3];
    p = new int[3][3];
    cout << "请输入3x3矩阵的9个元素:" << endl;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> *(*(p+i)+j);
        }
    }
    change(p);
    cout << "转置后矩阵为:" << endl;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << *(*(p + i) + j) << " ";
        }
        cout << endl;
    }
    for (int i = 0; i < 3; i++)
        delete[] p[i];
    delete[]p;
    return 0;
}
void change(int(*p1)[3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (j > i) {
                int t = *(*(p1 + i) + j);
                *(*(p1 + i) + j) = *(*(p1 + j) + i);
                *(*(p1 + j) + i) = t;
            }
        }
    }
}

用vs编译时出现了

warning C4154: 删除数组表达式;转换到提供的指针

运行时出现

图片说明

我发现问题是出在

for (int i = 0; i < 3; i++)

    delete[] p[i];

因为注释这两行后问题就都没了……

有无更好的解决办法?

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-23 00:37
    关注

    如果问题得到解决,请点下采纳

    #include<iostream>
    using namespace std;
    void change(int**p1);
    int main() {
        int **p;
        p = new int*[3];
        cout << "请输入3x3矩阵的9个元素:" << endl;
        for (int i = 0; i < 3; i++) {
            p[i] = new int[3];
            for (int j = 0; j < 3; j++) {
                cin >> *(*(p+i)+j);
            }
        }
        change(p);
        cout << "转置后矩阵为:" << endl;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                cout << *(*(p + i) + j) << " ";
            }
            cout << endl;
        }
        for (int i = 0; i < 3; i++)
            delete[] p[i];
        delete[]p;
        return 0;
    }
    void change(int**p1) {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (j > i) {
                    int t = *(*(p1 + i) + j);
                    *(*(p1 + i) + j) = *(*(p1 + j) + i);
                    *(*(p1 + j) + i) = t;
                }
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题