Указатели на структуру - C (СИ)
Формулировка задачи:
Сможет ли кто нибудь объяснить почему значение workers[2].name выводит Петров а не Иванов?
#include<stdio.h>
#include<conio.h>
struct man {
char name[20];}
workers[] = {
{ "Иванов", 200 },
{ "Петров", 180 },
{ "Сидоров", 150 }
},
*wptr;
main()
{ system("chcp 1251 > nul");
struct man *ptr, save;
ptr=wptr=workers+1;
save=workers[2];workers[2]=*wptr;*wptr=save;
printf( "%c %s\n",
*workers[1].name,workers[2].name);
getch();
}Решение задачи: «Указатели на структуру»
textual
Листинг программы
#include<stdio.h>
#include<conio.h>
struct man {
char name[20];}
workers[] = {
{ "Иванов", 200 },
{ "Петров", 180 },
{ "Сидоров", 150 }
},
*wptr;
main()
{ system("chcp 1251 > nul");
struct man *ptr, save;
ptr=wptr=workers+1;
/*save=workers[2];*/workers[2]=*wptr;/**wptr=save;*/
printf( "%c %s\n",
*workers[1].name,workers[2].name);
getch();
}
Объяснение кода листинга программы
- Объявление структуры
manс полемnameтипаcharдлиной 20 символов. - Объявление массива структур
workersтипаmanс размером 3 и инициализация его элементов значениями по умолчанию. - Объявление указателя
wptrна первый элемент массиваworkers. - В функции
main()производится установка кодировки символов в 1251 с помощью командыsystem(). - В функции
main()производится инициализация указателяptrзначениемwptr. - В функции
main()производится попытка присвоить указателюwptrзначениеworkers[2], но данная строка кода не выполняется. - В функции
main()производится попытка присвоить элементу массиваworkers[2]значение*wptr, но данная строка кода не выполняется. - В функции
main()производится попытка присвоить указателюwptrзначениеsave, но данная строка кода не выполняется. - В функции
main()происходит вывод на экран значения поляnameпервого элемента массиваworkersи значения поляnameвторого элемента массиваworkers. - В функции
main()производится ожидание нажатия клавиши с помощьюgetch().