Указатель на структуру - что напечатает программа - 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, то программа не выполняется и выдается ошибка.