Почему этот код работает? - C (СИ)

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

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

Добрый день. Столкнулся с тем, что код ниже не приводит к ошибкам при работе. Не могу понять, почему он не падает? Ведь он должен рушить стек. Или подскажите при каких условиях он будет падать? Компилятор - VS 2010.
#include "stdafx.h"
 
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
void fv( int a );
int fv2 ();
 
int (*pfv)(int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 1;
 
    pfv =  (int (__cdecl *)(int) ) fv; // вот тут косяк - указатель на функцию типа int,
// а возвращает она void
    a = fv2();
    printf( "%i ",  a);
    getch();
    return 0;
}
 
void fv( int a )
{
    int c = 2;
    return;
}
 
int fv2 ()
{
    int a = 3;
    (*pfv)(1);
    return a;
}

Решение задачи: «Почему этот код работает?»

textual
Листинг программы
int fv2 ()
{
   int a = (*pfv)(1);
   return a;
}

Объяснение кода листинга программы

В данном коде:

  1. fv2 - название функции, которая принимает на вход нет аргументов и возвращает целочисленное значение.
  2. a - переменная типа int, которая инициализируется значением, возвращаемым функцией pfv с аргументом 1.
  3. pfv - указатель на функцию, которая не принимает на вход аргументов и возвращает целочисленное значение.
  4. 1 - аргумент, передаваемый в функцию pfv. Итак, при вызове функции fv2, она инициализирует переменную a значением, возвращаемым функцией pfv с аргументом 1, после чего возвращает это значение.

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


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

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

8   голосов , оценка 4.25 из 5