首页 > 解决方案 > 使用未提供给它们的数据的函数

问题描述

函数 2 和 3 如何在 printf 中获取整数和浮点数?这很有趣,很想知道为什么?它与堆或堆栈有关吗?

#include <stdio.h>
#include <stdlib.h>
void function1(void){
int A = 50;
int B = 42;
float X = 3.1459;
float Y = 2.71828;
   printf(“Function 1\n”);
   printf(“%d+%d=%d\n”, A, B, A+B);
   printf(“%f+%f=%f\n”, X, Y, X+Y);
}
void function2(void){
int v1, v2;
float cs, ua;
   printf(“Function 2\n”);
   printf(“v1+v2=%d\n”, v1+v2);
   printf(“cs+ua=%f\n”, cs+ua);
}
void function3(void){
float cs, ua;
int v1, v2;
   printf(“Function 3\n”);
   printf(“v1+v2=%d\n”, v1+v2);
   printf(“cs+ua=%f\n”, cs+ua);
}
Int main(void){
   function1();
   function2();
   function3();
   return 0;
}

输出:

Function 1
50+42=92
3.145900+2.718280=5.864180
Function 2
v1+v2=92
cs+ua=5.864180
Function 3
v1+v2=92
cs+ua=5.864180

标签: c

解决方案


这是一种未定义的行为:当您不初始化局部变量时,标准没有定义在这种情况下要做什么。

这意味着它可能取决于您使用的编译器。

可能发生的情况是您获得了一些堆栈空间来存储变量,但由于您没有设置值,它使用先前写入该空间的值。

它可能是由另一个程序编写的,或者以前使用过这个内存位置的任何程序。它可能为 0,因为该内存位置从未使用过,您不知道,行为未定义(您无法定义行为,您无法预测值将是什么)。

它们也在堆栈上,堆用于动态内存,就像您使用malloc.


推荐阅读