变量具有值而不被赋予C ++

时间:2015-04-08 08:00:51

标签: c++ variables

#include <iostream>
#include <string>


using namespace std;

int count_number_place(int number)
  {

    int number_placement;

    while (number >= 1)
     {
       number_placement++;
       cout << number_placement <<endl;
       number/=10;
     }

    return  number_placement;
  }



int main(int argc, const char * argv[]) 
  {
    // insert code here...

    int user_input_number;

    cout << "Please enter your number here" << endl;
    cin >> user_input_number;
    cout << "User input number is "<< user_input_number <<endl;
    cout << "The numbers of digits in the input number is :" << count_number_place(user_input_number) << endl;

    return 0;
  }

我正在尝试创建一个计算给定数字位数的小程序 每当我输入200之类的数字时,预期结果为3。相反,我得到了7963。当我在第number_placement行放置断点时,我得到了一个默认值7961这很奇怪,因为该值未在代码中的任何位置分配。

你能解释一下为什么我得到那个结果吗?

2 个答案:

答案 0 :(得分:5)

只需将您的功能更改为

即可
int count_number_place(int number)
  {

    int number_placement = 0;         // assign 0

    while (number >= 1)
      {
        number_placement++;
        cout << number_placement <<endl;
        number/=10;
      }

    return  number_placement;
  }

即改变

int number_placement;

int number_placement = 0; 

如果您尝试访问未初始化的变量,您将获得垃圾值,因为它是未定义的行为。编译器只会给它一些垃圾值。

此链接可能有用

What happens to a declared, uninitialized variable in C? Does it have a value?

答案 1 :(得分:3)

编译程序时,您创建的变量(在本例中为number_placement)将分配一些内存空间(内存中的一个位置,其中包含一个地址)。如果你试图访问这个地址(这个我谈过的空间​​),而你之前没有给它分配任何东西,你会看到那里留下的东西,它是当前的值。我们称之为 garbage ,因为它是来自其他应用程序的剩余内存,可能之前一直在使用此内存位置,或者只是一些内存在没有任何值分配给它之前自内存供电以来on(或损坏,因为内存没有刷新此位置,因为它未被使用)。

始终初始化您的变量。

我的意思是:不要从之前没有赋值的变量中读取值。

在你的情况下,如果你想从零开始你的计数器,你应该用零初始化它:

int number_placement = 0;

在访问它之前(在你的情况下,递增它)。