定义变量时未初始化赋值的问题

变量定义时未初始化,导致生命周期结束后,重新定义变量时,仍然保存有之前的数据,或者数据为内存中的随机值。

如下代码:

#include <iostream>
using namespace std;

typedef struct s_xy
{
    int x;
    int y;
} s_xy;

int main() {
    // your code goes here
    for(int i = 0; i < 3; ++i)
    {
        s_xy point;
        volatile int num;
        if(1 == i)
        {
            // int j = 1
            cout << i << ": FuZhi" << endl;
            num = 3;
            point.x = 1;
            point.y = 2;
        }
        cout << i << ": point.x: " << point.x << endl;
        cout << i << ": num: " << num << endl;
    }
    return 0;
}

以上代码的输出是:

编译器:http://ideone.com/gLxtqh

0: point.x: 1
0: num: 0
1: FuZhi
1: point.x: 1
1: num: 3
2: point.x: 1
2: num: 3

编译器gcc:

0: point.x: 687612(一个随机值)
0: num: 0
1: FuZhi
1: point.x: 1
1: num: 3
2: point.x: 1
2: num: 3

所以,一般情况下,定义变量时必须初始化,结构体需要:

memset(&struct_name, 0, sizeof(struct_name));

否则不能直接读取。

时间: 2024-08-01 00:34:46

定义变量时未初始化赋值的问题的相关文章

[整理]定义但未初始化赋值的局部变量与OXCCCCCCCC

开发环境 : win7 32bit ,VS2010,先看一段C代码: #include <stdio.h> int main(){ int x; //-858993460 printf("%d",x); //弹出Debug Error对话框 //x=func1(); getchar(); return 0; } int func1(){ //如果被调用,返回 -858993460 } 在Debug模式下,x在定义的同时被默认初始化赋值为-858993460,什么情况? 原来

尽可能在定义变量的同时初始化该变量

尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记. 如果引用 了未被初始化的变量,可能会导致程序错误.本建议可以减少隐患. 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 using namespace s

final,static静态和非静态,初始化和代码块的区别、父类和子类中都有static变量时的初始化顺序、重写equals()、 instanceof强制转换

final:类不能被继承,方法不能被重写,属性值不能被修改(常量): 可以调用: static静态常量----- 不需要创建对象,可以直接调用类里面的属性,方法: 示例如下: 加了static说明它是属于整个类的,每个对象值都一样,如下图所示:size是静态的,所以当在下面t1对象中改变size的值时,整个类中的size值都变了:然后作为普通属性的length,当在t1对象中改变其值,并不会改变原始值: 静态方法不能调用非静态的方法和非静态的属性,也不能打印非静态的方法和非静态的属性:可以在静态

定义变量时无引号,单引号,双引号区别与特点:

a=192a=192-$ab='192-$a'c="192-$a" echo "a=$a"echo "b=$b"echo "c=$c" 输出结果如下: a=192-192b=192-$ac=192-192-192 第一种定义a变量的方式是不加任何引号直接定义变量的内容,当内容为简单连续的数字.字符串.路径名时,可以这样用.第二种定义b变量的方式是通过单引号定义.这种方式的特点是:输出变量内容时单引号里是什么就输出什么,即使内容

Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

1.执行顺序 1.1.一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量.初始化块.构造器). 示例如下:(结果见注释) 1 class A { 2 public A() { 3 System.out.println("Constructor A."); 4 } 5

学习go语言编程系列之定义变量

package main import ( "fmt" "math") func main() { // 1. 定义变量名age,不初始化,使用对应类型的默认值 var age int fmt.Println("My age is", age) // 2. 给变量赋值 age = 29 fmt.Println("My age is", age) age = 50 fmt.Println("My age is"

变量和不同的赋值方式(四)

在 makefile 中是支持程序设计语言中变量的概念的,makefile 中的变量只代表文本数据(字符串).那么在 makefile 中的变量名的规则又有哪些呢?a> 变量名可以包含字符.数字以及下划线:b> 不能包含 ":" , "#" , "=" 或 " ":c> 变量名大小写敏感.下来我们来看看变量的定义和使用,如下 下来我们以代码为例来进行分析说明 CC := gcc TARGET := hello

[C++基本语法:从菜鸟变成大佬系列](三):C++的定义变量

变量定义类型 类型 含义 bool 存储值为true或false char 通常为单个八位字节(一个字节).这是一个整数类型 int 机器最自然的整数大小 float 单精度浮点值 double 双精度浮点值 void 表示类型缺失 wchar_t 广泛的字符类型. C++中的变量定义变量定义告诉编译器为变量创建的存储位置和容量.变量定义指定数据类型,并包含该类型的一个或多个变量的列表,如下所示 1 type variable_list; 此处,类型必须是有效的 C++ 数据类型,包括字符.w_

swift基本用法-var/let定义变量和常量

// Playground - noun: a place where people can play import UIKit //------------------------------------------------------------------------------ // 1. 行打印一个字符串 println("Hello, World!") //---------------------------------------------------------