我在一些我认为非常直接的事情上遇到编译器错误而且我并不完全理解。我有一个2D数组,我想在交换机情况下将其中一个元素与另一个元素进行比较。
#define REV_1 {'A','B','C','D'}
#define REV_2 {'E','F','G','H'}
#define REV_3 {'I','J','K','L'}
void myfunction()
{
char Revisions[3][4] = {REV_1,REV_2,REV_3};
char Rev1FirstLetter = Revisions[0][0];
char Rev2FirstLetter = Revisions[1][0];
char Rev3FirstLetter = Revisions[2][0];
char doesntmatter = 5;
switch(doesntmatter)
{
case Rev1FirstLetter:
{
[....]
break;
}
case Rev2FirstLetter:
{
[....]
break;
}
case Rev2FirstLetter:
{
[....]
break;
}
}
}
我收到编译错误
Error: #268: declaration may not appear after executable statement in block
就行了
char Rev1FirstLetter = Revisions[0][0];
char Rev2FirstLetter = Revisions[1][0];
char Rev3FirstLetter = Revisions[2][0];
所以我必须使用指针和偏移来访问这些元素吗?我知道你可以在数组中分配值,如
Revisions[0][1] = 'F';
但我一直认为你可以用同样的方式从数组中读取值。对于初学者的问题很抱歉,但有人可以向我解释一下访问这个2D数组中数据的最佳方法是,它是否需要指针和偏移,或者其他方法?
答案 0 :(得分:0)
作业没问题。但是,switch语句存在问题,因为case值不是常量表达式。 如果我将case值更改为常量表达式,即'A','B',则使用c99标志进行编译。