这个问题是我在学习stm32,使用c语言进行编程时遇到的,在此记录解决问题的方法,希望自己谨记的同时帮助大家,也希望能和大家一起打牢编程的基础知识。
我用一个简单地程序来解释这个问题。
问题:
调用数组的时候报错,数组下标超出范围
warning:subscript out of range
其实是你引用整个数组的问题,引用数组只用数组名就好了。
#include "iostream"
#include "stdio.h"
using namespace std;
#define DoNothing 1
///这是一个三维数组,一共有2*4*8=64个元素
const unsigned int Haus[2][8][4] =
{
128,0,255,127,128,1,255,63,
128,3,255,31,255,3,255,15,
193,3,255,7,193,31,255,3,
193,63,128,1,193,127,128,0,
0,0,127,0,0,0,127,0,
0,0,127,0,127,60,127,0,
127,60,127,0,127,0,127,0,
127,0,0,0,127,0,0,0
};
///为了解释问题,写一个测试函数,在主函数中调用
void testfunction(const unsigned int Array[2][8][4])
{for(i1=0;i1<2,i1++)
{
for(i2=0,i2<8,i2++)
{
for(i3=0;i3<2,i3++)
{DoNothing;}
}
}
}
///在主函数调用测试的函数
int main()
{
testfunction(Haus[2][8][4]);
///testfunction(Haus);
}
//这样就会报错subscript out of range
//如果想整体调用这个三维数组,可以像注释那样子引用整个数组,只写数组名就可以了
其实这是一个很傻的错误,我这个函数想整体调用这个数组,那么只需要输入数组名作为函数参数就可以了,然而我却写了一个Haus[2][8][4],这个其实是超出范围的引用,很简单,但是在编程的时候,很容易头脑发热忽略掉。