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

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

关注引自免费微信小程序:皆我百晓生
看起来你在尝试将一个三维数组赋值给一个一维字符指针,这在某些情况下可能会导致警告或错误,因为不同编译器对这种操作的支持程度可能不同。为了更好地理解你的问题,这里有几个关键点需要澄清:
char array[rows][columns][depth]吗?首先,我会展示一种常见的方法来处理这种情况,通过嵌套循环遍历三维数组并将数据存储在一个一维缓冲区中,然后可以安全地使用这个指针。下面是示例代码:
#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。如果你仍然遇到问题,请提供详细的错误消息以及你的原始代码,以便我能进一步分析。