Как получить индекс массива с помощью указателей - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь напечатать индекс массива, используя арифметику указателей. У кого-нибудь есть идеи как это сделать? в частности "j", я бы хотел, чтобы вы это сделали.

#include <stdio.h>

int main(void) {

    int b[10] = {2, 8, 4, 7, 1, -45, 120, 78, 90, -6};
    int *pb, j = 0;

    for(pb = &b[0]; pb < &b[10];) {
        printf("[%d] = %d\n", j, *pb++);
    }

    return 0;
}

Ответы [ 2 ]

2 голосов
/ 28 октября 2019

Вот так:

int main(void) {

    int b[10] = { 2, 8, 4, 7, 1, -45, 120, 78, 90, -6 };
    int *pb, j = 0;

    for (pb = &b[0]; pb < &b[10]; pb++) {
        printf("[%td] = %d\n", pb-b, *pb);
    }

    return 0;
}

В арифметике указателей вы можете получить разность индексов с вычитанием: pb-b - это индекс элемента, на который b указывает в массиве pb. Я также переместил *pb++ в приращение цикла for, чтобы избежать ошибки "по одной ошибке".

1 голос
/ 28 октября 2019

Вот еще один вариант:

int b[10] = {2, 8, 4, 7, 1, -45, 120, 78, 90, -6};
for (int* pb = b; pb != b + sizeof(b) / sizeof(*b); pb++)
    printf("[%d] = %d\n", pb - b, *pb);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...