Упражнения на C: Показать указатель на массив, содержимое которого является указателем на структуру
Указатель C: упражнение 20 с решением
Напишите программу на C, чтобы показать указатель на массив, содержимое которого является указателем на структуру.
Иллюстрированная презентация:
Пример решения:
Код C:
#include <stdio.h>
struct employee
{
char *empname;
int empid;
};
int main()
{
printf("\n\n Pointer : Show a pointer to an array which contents are pointer to structure :\n");
printf("-----------------------------------------------------------------------------------\n");
static struct employee emp1={"Jhon",1001},emp2={"Alex",1002},emp3={"Taylor",1003};
struct employee(*arr[])={&emp1,&emp2,&emp3};
struct employee(*(*pt)[3])=&arr;
printf(" Exmployee Name : %s \n",(**(*pt+1)).empname);
printf("---------------- Explanation --------------------\n");
printf("(**(*pt+1)).empname\n");
printf("= (**(*&arr+1)).empname as pt=&arr\n");
printf("= (**(arr+1)).empname from rule *&pt = pt\n");
printf("= (*arr[1]).empname from rule *(pt+i) = pt[i]\n");
printf("= (*&emp2).empname as arr[1] = &emp2\n");
printf("= emp2.empname = Alex from rule *&pt = pt\n\n");
printf(" Employee ID : %d\n",(*(*pt+1))->empid);
printf("---------------- Explanation --------------------\n");
printf("(*(*pt+1))-> empid\n");
printf("= (**(*pt+1)).empid from rule -> = (*).\n");
printf("= emp2.empid = 1002\n");
printf("\n\n");
return 0;
}
Пример вывода:
Указатель: показать указатель на массив, содержимое которого является указателем на структуру: -------------------------------------------------- --------------------------------- Имя сотрудника: Алекс ---------------- Пояснение -------------------- (** (* пт + 1)). EmpName = (** (* & arr + 1)). empname as pt = & arr = (** (arr + 1)). empname из правила * & pt = pt = (* arr [1]). empname из правила * (pt + i) = pt [i] = (* & emp2) .empname as arr [1] = & emp2 = emp2.empname = Алекс из правила * & pt = pt ID сотрудника: 1002 ---------------- Пояснение -------------------- (* (* pt + 1)) -> empid = (** (* pt + 1)). empid из правила -> = (*). = emp2.empid = 1002
Блок - схема:
Редактор кода программирования C:
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Previous: написать программу на C, чтобы показать указатель на union.
Далее: написать программу на C для печати всех алфавитов с помощью указателя.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования
disqus2code