Linr233 2024-06-08 00:58 采纳率: 100%
浏览 9
已结题

我把一个三维数组赋给一级指针,这样子更方便便利数组内容,但是遇到一些奇奇怪怪的问题

我把一个三维数组赋给一级指针,这样子更方便便利数组内容,在visual stdio上编译发现是可取的,但是在keil MDK上进行编译是出现警告,担心这个警告对我的编程有影响,我另外在一个文件上同样定义一个三维数组,并同样赋值给一级指针,然后对指针进行移动,想要尝试在oled屏上显示这个数组的内容来验证这个警告是否有影响,结果在这个文件里警告就变成了错误,求解惑,真的想不到解决办法😫

img


这里显示警告编译完就是错误了 直接让我不能下程序到单片机里,而在我的工程文件里编译完仅仅只是警告

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-08 00:58
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试将一个三维数组赋值给一个一维字符指针,这在某些情况下可能会导致警告或错误,因为不同编译器对这种操作的支持程度可能不同。为了更好地理解你的问题,这里有几个关键点需要澄清:

    1. 三维数组的维度是什么?例如,它是char array[rows][columns][depth]吗?
    2. 你如何初始化这个三维数组?
    3. 你如何将三维数组赋值给一维指针?

    首先,我会展示一种常见的方法来处理这种情况,通过嵌套循环遍历三维数组并将数据存储在一个一维缓冲区中,然后可以安全地使用这个指针。下面是示例代码:

    #include <stdint.h>
    
    // 假设你的三维数组是这样的
    #define ROWS 3
    #define COLUMNS 4
    #define DEPTH 2
    uint8_t display_array[ROWS][COLUMNS][DEPTH];
    
    // 初始化三维数组(根据你的实际数据)
    void init_display_array() {
        for (int i = 0; i < ROWS; ++i) {
            for (int j = 0; j < COLUMNS; ++j) {
                for (int k = 0; k < DEPTH; ++k) {
                    display_array[i][j][k] = 0x00; // 根据需要填充数据
                }
            }
        }
    }
    
    // 将三维数组转换为一维指针
    uint8_t* get_flat_array() {
        uint8_t flat_array[(ROWS * COLUMNS * DEPTH)];
        uint8_t* pos = flat_array;
    
        // 遍历并复制数据到flat_array
        for (int i = 0; i < ROWS; ++i) {
            for (int j = 0; j < COLUMNS; ++j) {
                for (int k = 0; k < DEPTH; ++k) {
                    *pos++ = display_array[i][j][k];
                }
            }
        }
    
        return flat_array;
    }
    
    // OLED 显示函数调用
    void OLED_ShowHexNum(int row, int col, uint8_t value, int size) {
        // ...
    }
    

    接下来,你需要在你的主函数中调用这些函数:

    int main(void) {
        init_display_array();
        uint8_t* pos = get_flat_array();
    
        OLED_ShowHexNum(4, 1, *(pos + 1), 2); // 使用 pos 指针访问数据
    
        // ... 其他代码
    
        return 0;
    }
    

    这种方法应该能在大多数编译器上工作,包括Keil MDK。如果你仍然遇到问题,请提供详细的错误消息以及你的原始代码,以便我能进一步分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月8日