Инкремент указателя массива - PullRequest
0 голосов
/ 02 апреля 2020
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{
    int x = 100, i;
    double D[x];

    for(i=0; i < 100; i++)
        scanf("%f", D++);

    return 0;
}

Код содержит две ошибки:

  1. "%f" вместо "%lf" - ошибка компиляции

  2. D++ - ошибка компиляции

Но почему D++ ошибка? как D является указателем на первый элемент массива, а ++ может использоваться в массиве, как указатели?

Ответы [ 2 ]

4 голосов
/ 02 апреля 2020

D не является указателем на первый элемент массива. D является массивом, и массив "распадается" в указатель на свой первый элемент в большинстве контекстов.

Оператор ++ нельзя использовать в массиве, поскольку он изменяет его операнд и массив не могут быть изменены (хотя его элемент).

2 голосов
/ 02 апреля 2020

вы должны знать, что D не является указателем на первый элемент массива, но является именем массива, а имя массива имеет специальную особенность, поскольку оно имеет адрес первого элемента в массиве, но не может быть увеличено или уменьшено поскольку это не реальный указатель, а только адрес первого элемента в массиве, так что имейте в виду (douple D [x]; "имя массива" = D = & D [0]) SO, если вы хотите увеличить Для сканирования элементов массива пользователем существует два метода, во-первых, используя массив

 for(i=0; i < 100; i++)
        scanf("%lu", D[i]);

, во-вторых, используя указатель

douple *ptr=&D[0];
for(i=0; i < 100; i++)
        scanf("%lu", *(ptr+i);

Как вы хотите заполнить элементы массива значениями

 *(D+i)=*(ptr+i)=D[i] 

в то же время я

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...