Почему этот код работает? - 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; }
Объяснение кода листинга программы
В данном коде:
- fv2 - название функции, которая принимает на вход нет аргументов и возвращает целочисленное значение.
- a - переменная типа int, которая инициализируется значением, возвращаемым функцией pfv с аргументом 1.
- pfv - указатель на функцию, которая не принимает на вход аргументов и возвращает целочисленное значение.
- 1 - аргумент, передаваемый в функцию pfv. Итак, при вызове функции fv2, она инициализирует переменную a значением, возвращаемым функцией pfv с аргументом 1, после чего возвращает это значение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д