Что вызывает «предупреждение: присваивание из-за несовместимой ошибки типа указателя»? - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь поэкспериментировать с арифметикой указателей, но получаю это предупреждение. Я не могу понять, где это идет не так.

Код написан для игры с арифметикой указателей, так как мои основы слабы.

    printf("To Check ptrs \t");
    int var[3]={10,20,30};
    int *ptr,i;
    ptr=var;
    for(i=0;i<3;i++)
    {
       printf("Address is %d \t", ptr);
       printf("Value is %d \t", *ptr);
       ptr++;
    }
    ptr=(int*)&var;
    for(i=0;i<3;i++)
    {
       printf("Address is %d \t", &ptr[i]);
       printf("Value is %d \t", ptr[i]);
    }

ptr_arith.c:14:5: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
  ptr=&var;
     ^

Я получил желаемый вывод. Кроме того, когда я использую

ptr=(int*) &var; 

, это не дает мне никакой ошибки. Так что, если кто-то может сказать мне, что делает его «несовместимым», я буду благодарен.

1 Ответ

1 голос
/ 10 ноября 2019

Это очень просто.

Массивы распадов указателям следует указывать следующим образом:

int arr[10];

arr относится к типу int *

&arr[0]- имеет тип int *

&arr и имеет указатель типа на массив из 10 целых чисел.

В вашем коде вы должны использовать

ptr = var или ptr = &var[0] как var и &var[0] имеют тот же тип, что и указатель ptr.

&var другого типа, таким образом, предупреждение.

...