Указатель на структуру - что напечатает программа - C (СИ)
Формулировка задачи:
Возьмём пример на языке Си:
1. Что напечатается?
2. Что будет, если раскомментировать закомментированный код?
3. Что будет, если данный тест подать в компилятор Си++?
Традиционная просьба к тем, кто заранее знает ответ, прятать его под CUT
Листинг программы
- #include <stdio.h>
- typedef struct
- {
- int x, y;
- } MyStruct;
- int main (void)
- {
- struct MyStruct *p;
- p = NULL;
- printf ("%p\n", p);
- /*
- p++;
- printf ("%p\n", p);
- */
- return 0;
- }
UPD
: подправлен примерРешение задачи: «Указатель на структуру - что напечатает программа»
textual
Листинг программы
- #include <stdio.h>
- typedef struct
- {
- int x, y;
- } MyStruct;
- typedef struct MyStruct* MyStructPtr;
- int main (void)
- {
- MyStructPtr p;
- p = NULL;
- printf ("%p\n", p);
- /*
- p++;
- printf ("%p\n", p);
- */
- return 0;
- }
Объяснение кода листинга программы
В данном коде определен тип структуры MyStruct
с двумя полями типа int
— x
и y
. Также определен указатель на эту структуру MyStructPtr
.
В функции main
инициализируется указатель p
на структуру MyStruct
значением NULL
(указатель на отсутствующую память). Затем происходит попытка инкремента указателя p
(что было бы некорректно, так как указатель не указывает на существующую память), и выводится значение указателя до и после инкремента.
Но так как в коде отсутствует оператор new
для выделения памяти под объект структуры MyStruct
, то программа не выполняется и выдается ошибка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д