Указатель на структуру - что напечатает программа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Возьмём пример на языке Си:
#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;
}
1. Что напечатается? 2. Что будет, если раскомментировать закомментированный код? 3. Что будет, если данный тест подать в компилятор Си++? Традиционная просьба к тем, кто заранее знает ответ, прятать его под CUT

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 с двумя полями типа intx и y. Также определен указатель на эту структуру MyStructPtr. В функции main инициализируется указатель p на структуру MyStruct значением NULL (указатель на отсутствующую память). Затем происходит попытка инкремента указателя p (что было бы некорректно, так как указатель не указывает на существующую память), и выводится значение указателя до и после инкремента. Но так как в коде отсутствует оператор new для выделения памяти под объект структуры MyStruct, то программа не выполняется и выдается ошибка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы