C/C++: почему невозможно объявить указатель при инициализации цикла

При печати массива инициализация целого числа работает.

int a[MAX_SIZE] = {1,2,3,4,5,6,7,8,9,10};

for (int i = 0; i <= (MAX_SIZE - 1); i++)
{
    printf("%3d",a[i]);
}

Однако мне интересно, почему инициализация указателя на целое число ("ходок") не будет работать:

int a[MAX_SIZE] = {1,2,3,4,5,6,7,8,9,10};

for (int *aWalk = a, int *aEnd = a + MAX_SIZE - 1; aWalk <= aEnd; aWalk++)
{
    printf("%3d", *aWalk);
}

4 ответа

Решение

Заявление int *aWalk = a, int *aEnd = a + MAX_SIZE - 1; даже не работал бы сам по себе, поэтому он не может работать и в заголовке цикла. Синтаксис, который вы ищете, это:

int *ptr1 = some_address, *ptr2 = some_other_address;

Это работает внутри и снаружи цикла. Также обратите внимание, что ваша проблема не в объявлении одного указателя, а в двух. Вот почему вы должны сначала извлечь минимальный пример.

for Начальное выражение может быть определением для нескольких переменных, если оно объединено в одно определение:

int a[MAX_SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int *aWalk = a, *aEnd = a + MAX_SIZE; aWalk < aEnd; aWalk++) {
    printf("%3d ", *aWalk);
}

Обратите внимание, что более общим является определение указателя конца, указывающего за конец массива, так как эта форма может обрабатывать кусочки ширины. 0,

Вы можете сделать это только с помощью арифметики с указателями. Это работает, потому что вы объявляете массив данных, и эти данные постоянно хранятся в памяти.

int a[] = {1,2,3,4,5,6,7,8,9,10};

for (int *aWalk = a; aWalk < (a + sizeof(a) / sizeof(int)); aWalk++)
{
    printf("%3d", *aWalk);
}

Также попробуйте здесь IDE One [^].

редактировать:

из-за комментариев я изменил код, используя указатель конца. код [^].

for (int *aWalk = a, *aEnd = (a + sizeof(a) / sizeof(int)); aWalk < aEnd; aWalk++)
{/*...*/}

У вас есть дополнительный int во втором коде. Также ваше размещение запятой неправильно. Также удалены ненужные aEnd переменная.

int a[MAX_SIZE] = {1,2,3,4,5,6,7,8,9,10};

for (int *aWalk = a; *aWalk < (a + MAX_SIZE - 1); aWalk++)
{
    printf("%3d", *aWalk);
}
Другие вопросы по тегам