Почему адрес переменной массива нельзя назначить указателю? А что такое «Wfatal-ошибки»? - PullRequest
1 голос
/ 21 февраля 2012

Я попробовал вставленный ниже код и получил ошибку:

не может преобразовать int (*)[6] в int* в назначении
компиляция прекращена из-за -Wfatal-errors.

#include <stdio.h>

int my_array[] = {1,23,17,4,-5,100};
int *ptr;

int main(void)
{
    int i;
    ptr = &my_array;     /* point our pointer to the first
                                      element of the array */
    printf("\n");
    for (i = 0; i < 6; i++)
    {
      printf("my_array[%d] = %d   ",i,my_array[i]);   /*<-- A */
      printf("ptr + %d = %d\n",i, *(ptr + i));        /*<-- B */
    }
    return 0;
}

Ответы [ 4 ]

2 голосов
/ 21 февраля 2012

Вы должны использовать:

ptr = my_array;

Что эквивалентно:

ptr = &my_array[0];
2 голосов
/ 21 февраля 2012

Массив может быть преобразован в указатель.То, что вы хотели сделать, это:

ptr = my_array;
2 голосов
/ 21 февраля 2012
ptr = &my_array;

Тип &my_array равен int (*)[6], а тип ptr - int*.Это несовместимые типы.

То, что вы должны сделать, это:

ptr = my_array;

Теперь тип my_array равен int[6], который распадается на int* в вышеприведенном контексте.Так и работает.

0 голосов
/ 21 февраля 2012

Все, что вам нужно сделать здесь:

ptr = my_array;

Нет необходимости использовать оператор &.

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