#include <stdio.h>
Код: Выделить всё
int main () {
struct a {
int b;
};
struct a c;
c.b= 6;
c.b= 34;
return 0;
}
Видно, что описана структура a (для простоты в неё входит всего один элемент), а потом объявлена переменная c структурного типа. А после первый и единственный элемент c.b этой переменной 1) инициализирован значением 6; 2) Значение элемента с.b изменено на 34.
Если член структуры будет массив элементов типа char, то не то что изменения, инициализации никакой не произойдёт. Действительно, эта программа нерабочая
Код: Выделить всё
#include <stdio.h>
int main () {
struct a {
char b [4];
};
struct a c;
c.b= "hjh";
return 0;
}
Бесполезно также инициализировать c.b так: c.b= {'h', 'j', 'h'}; или так: c= {.b= "hjh"};
Единственный способ инициализировать c.b- сделать это при объявлении переменной с. И это способ именно инициализации, но никак не изменения. Действительно вот рабочая программа
Код: Выделить всё
#include <stdio.h>
int main () {
struct a {
char b [4];
};
struct a c= {.b= "jhj"};
return 0;
}
Всё. В дальнейшем элемент c.b невозможно изменить никоим образом, он как стал первоначально jhj, так jhj и остаётся. А если бы с.b был, например, типа int, тогда пожалуйста, изменяй. В книгах ничего о возможности или невозможности такого изменения не сказано, там только сказано как обратиться к такому элементу переменной: с.b. Получается, такое вот обращение только для одного и может послужить- для напечатания значения c.b. А вот возможно ли к нему обратиться, чтобы его изменить, если он массив типа char... Впрочем, я повторяюсь. Итак, возможно ли его изменить, как Вы это знаете? Может, так и должно быть, просто авторы на это внимание своё не обратили? Cпасибо.