Как использовать a для каждого цикла с многомерным массивом в C

#arrays #multidimensional-array #foreach #c -cli

#массивы #многомерный массив #foreach #c -cli

Вопрос:

Итак, прежде всего, вы должны отметить, что я использую Visual studio 2010. В любом случае, я получаю очень странную ошибку в моем for each loop, которая не имеет для меня никакого смысла.

 BYTE CPUKeys[][0x10] =
{
    {0x28,0x53,0x71,0xD9,0x7B,0x47,0xCC,0x50,0xAF,0x45,0x8D,0xB3,0xED,0x53,0x22,0x13},//Randy//encrypted
    {0x6E,0x38,0xB0,0xEF,0x6E,0x96,0x20,0x16,0xE5,0xCA,0x4B,0xE9,0x23,0x4E,0xC6,0xA5},//Josh//encrypted
    {0x95,0x2C,0x20,0x98,0xF9,0x99,0x28,0x0F,0xEE,0xA7,0x8F,0x48,0x58,0x01,0xB7,0x07},//Falcon//encrypted
    {0x64,0xDC,0x1E,0xFA,0xD2,0xAE,0x57,0x6C,0x0B,0xD0,0x39,0x6A,0x13,0x2C,0x91,0xE0},//Justin//encrypted
    {0x8D,0x82,0x6D,0x71,0x82,0xDC,0x83,0x8F,0x79,0x51,0xB8,0x7C,0x1F,0xC1,0xBF,0xD4},//Bypass//encrypted
    {0x27,0xF2,0xA7,0xF3,0xE2,0xDC,0x01,0x19,0x17,0xF4,0x11,0xFE,0xE9,0xB5,0x0C,0x2C},//Surge//encrypted
    {0x6D,0x7C,0x86,0x9A,0x6A,0xE1,0xD4,0x10,0x76,0x16,0x11,0x7C,0xED,0xB3,0x4D,0x56},//Noel//encrypted
    {0x3D,0x6C,0x88,0x8C,0x9D,0x3A,0xA5,0x40,0x64,0xDF,0xDF,0x8D,0x94,0xFD,0x28,0xF1},//XexRgh//encrypted
    {0x06,0x0D,0x8C,0xB6,0xB6,0x6D,0x29,0xD7,0x41,0xE1,0x13,0x35,0x84,0x80,0x68,0x31}//Zoobzy//encrypted
};
  

Хорошо, вот мой многомерный массив БАЙТОВ.

 for each(BYTE ID[0x10] in CPUKeys)
{
  

И для каждого цикла есть my . Странная вещь, которая происходит с этим, — это моя ошибка, которую я получаю в ID. Ошибка гласит: «для каждого» тип итератора «БАЙТ [16]» несовместим с типом элемента «БАЙТ [16]». Есть идеи, почему это может быть сказано? Что я делаю не так, и как мне это исправить?

Комментарии:

1. for each(BYTE ID[0x10] in CPUKeys) недопустимая конструкция C , покажите точное утверждение и ошибки

2. Мой компилятор (VS 2005) показывает другую ошибку: for each statement cannot operate on variables of type 'unsigned char [9][16]' , так что, возможно, то, что вы хотите, невозможно…

3. Это вся функция того, что я использую, извините за путаницу. Редактировать: по-видимому, enter не делает отступ до следующей строки в комментарии. Кроме того, в любом случае было слишком долго комментировать: (

4. Вы имеете в виду c /cli правильно? (Это совсем другой зверь c )

5. @user3765064 Просто дикое предположение: может BYTE (amp;ID)[0x10] быть, работает? (Я не могу проверить это сам)

Ответ №1:

Попробуйте это, если это сработает:

 for(autoamp; rows: CPUKeys)// Iterating over rows
{
    for(autoamp; elem: rows)
    {
        // iterate every row's column
    }
}
  

Комментарии:

1. AFAIK Visual Studio 2010 не поддерживает циклы диапазона, но я не использовал его в течение длительного времени.

Ответ №2:

Насколько я знаю, в c нет ни одного цикла. Вместо этого используйте два цикла for . Что-то вроде этого

 for (int i = 0; i < 9;   i)
{
   for (int j = 0; j < 16;   j)
   {
     BYTE value = CPUKeys[i][j];
   }
}
  

Комментарии:

1. Синтаксис для цикла foreach в C 11

2. OP использует Visual Studio 2010; for each похоже, это расширение языка, специфичное для этого компилятора

3. for(int KeyNum = 1;KeyNum < 10;KeyNum ) { if(!memcmp(Cpu,CPUKeys[KeyNum],0x10)) { // однако консоль xbox отображается черным цветом. Однако, похоже, он делает то, что вы говорите. Любые мысли о том, что может быть не так с этим?