Получение назначения из-за несовместимой ошибки типа указателя в C - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно создать код, который объявляет и инициализирует три переменные: double, int и string (5 бит, включая нулевой символ), затем печатает адрес размера и значение, используя printf и sizeof

#include <stdio.h>
#include <stdlib.h>

int main() {

    int number = 5, *pI;
    pI = &number; // Assigning Integer variable to integer pointer
    double number2 = 10.5, *pD;
    pD = &number2; // Assigning Double variable to Double pointer
    char arry[] = "dogs", *pc;
    pc = &arry; // Assigning Char Array variable to Char Array Pointer

    // Size, Address and Value stored in each Integer Variable, Double Variable and Character Variable
    printf("Integer Size is = %d , Address is = 0x%p and Value is = %d: \n",
            sizeof(number), &number, number);
    fflush(stdout);
    printf("Double Size is = %d, Address is = 0x%p and Value is = %lf: \n",
            sizeof(number2), &number2, number2);
    fflush(stdout);
    printf(
            "Character Array Size is = %d, Address is = 0x%p and Value is = %s: \n",
            sizeof(arry), &arry, arry);
    fflush(stdout);

    // Pointers Size, Address and Value stored in each Integer Pointer, Double Pointer and Charecter pointer
    printf(
            "Pointer Integer Size is = %d , Address is = 0x%p and Value is = %d: \n",
            sizeof(pI), &pI, *pI);
    fflush(stdout);
    printf(
            "Pointer Double Size is = %d, Address is = 0x%p and Value is = %lf: \n",
            sizeof(pD), &pD, *pD);
    fflush(stdout);
    printf(
            "Pointer Character Array Size is = %d, Address is = 0x%p and Value is = %s: \n",
            sizeof(pc), &pc, pc);
    fflush(stdout);

    return 0;
}

1 Ответ

0 голосов
/ 30 октября 2018
char arry[] = "dogs", *pc;
pc = &arry;

arry имеет тип char[5], это массив char, поэтому &arry это указатель на массив char. Поскольку pc относится к типу char *, указатели несовместимы.

pc = arry;

Здесь arry распадается на указатель на свой первый элемент, и это назначение допустимо.

С другой стороны, если вы действительно хотите указатель на массив char, как написано в ваших комментариях, вы должны объявить его следующим образом:

char (*pc)[5];

Также вы должны использовать правильные идентификаторы в printf и привести указатели к void *. Для size_t вы должны использовать %zu.

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