Доступ к вложенной структурной переменной - PullRequest
0 голосов
/ 30 января 2019

Когда я пытался скомпилировать следующую программу, она не выдает вывод на экран:

#include<stdio.h>
int main ()
{
struct d1
{
char arr [10];
int num;
};

struct d2
{
struct d1 name;
int age;
}p1;

p1.name={("JANE",8)};
printf ("%s",&p1.name.arr[0]);
}

Я думаю, что проблема связана со строкой p1.name={("JANE",8)}; Но я думаю, что все написал правильно.Написав эту строку, я попытался присвоить значение члену "name" переменной p1, имеющей тип структуры d2.И поскольку name сама является структурой типа d1, имеющей два члена, я назначил два значения JANE и 8 для arr [10] и num членов name соответственно.

Я даже пытался с

p1.name={{"JANE",8}}; //For this it gives error

p1.name={("JANE",8),20}; //For this it compiles but no output

p1.name={{"JANE",8},20}; //again error

То, что 20 является значениемp1's член "age".При попытке вывести значение p1.name.age вместо 20 выдает 0.

Что не так?Есть ли синтаксическая ошибка или концептуальная ошибка?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

если это инициализация, сделайте напрямую:

#include<stdio.h>

int main ()
{
  struct d1
  {
    char arr [10];
    int num;
  };

  struct d2
  {
    struct d1 name;
    int age;
  }p1 = {{"JANE",8}, 20};

  printf ("%s",&p1.name.arr[0]);
}

p1.name.num равно 8 и p1.age равно 20

примечание &p1.name.arr[0] может быть p1.name.arr

0 голосов
/ 30 января 2019
  1. Форма, которую вы используете, разрешена, только если вы инициализируете структуру.Вам нужно использовать составные литералы.

#include<stdio.h>

int main ()
{

    struct d1
    {
        char arr [10];
        int num;
    };

    struct d2
    {
        struct d1 name;
        int age;
    }p1;

    p1.name=(struct d1){"JANE",8};
    printf ("%s",p1.name.arr);
}
...