для ввода данных в структуру входит указатель - PullRequest
0 голосов
/ 28 февраля 2011
#include<stdio.h>
#include<stdlib.h>
struct test
{
    int x;
    int *y;
};

main()
{
    struct test *a;
    a = malloc(sizeof(struct test));

    a->x =10;
    a->y = 12;
    printf("%d %d", a->x,a->y);
}

Я получаю o / p, но есть предупреждение

 warning: assignment makes pointer from integer without a cast

и

 warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘int *’

как ввести значение для * y в struct test

1 Ответ

6 голосов
/ 28 февраля 2011

Для доступа вам необходимо разыменовать указатель, возвращаемый выражением a-> y, чтобы манипулировать указанным значением. Для этого используйте унарный оператор *:

Вам также нужно выделить память для y, чтобы убедиться, что она указывает на что-то:

a->y = malloc(sizeof(int));
...
*(a->y) = 12;
...
printf("%d %d", a->x,*(a->y));

И обязательно освободите данные malloc'd в обратном порядке, это был malloc'd

free(a->y);
free(a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...