我在一些我认为非常简单但并不完全理解的事情上遇到了编译器错误。我有一个二维数组,我想将其中一个元素与 switch case 中的另一个元素进行比较。
#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';
但我一直认为你可以用同样的方式从数组中读取值。很抱歉提出了初学者的问题,但是有人可以向我解释一下访问这个二维数组中的数据的最佳方法是什么吗?它是否需要指针和偏移量,或者其他方法?
最佳答案
作业没问题。但是,switch 语句存在问题,因为 case 值不是常量表达式。 如果我将 case 值更改为常量表达式,即“A”、“B”,它将使用 c99 标志进行编译。
关于c - 在 C 中访问二维数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202748/