zoukankan      html  css  js  c++  java
  • 变量的声明和定义

     
    从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。 
    对于下面的两句代码: 
    void Func() 
    { 
    int a; 
    int b=1; 
    a=0; 
    } 
    对于第一行代码,编译器不会做任何事,它不会为它在栈中分配一点东西,直到第三句,a=0;时,编译器才会将其压入栈中。而对于int b=1;这一句,编译器就会生成一条指令,为它赋值。如果反汇编,看到的代码可能是这样的: 
    push 1;         
    push 0; 
    当然,并不一定编译器就会样做,也有可能在声明int a时,编译器就会把一个废值入栈,到第三条再为其赋值,这要看编译器的具体取舍,所以,声明不一定不是定义,而定义一定是定义。 
    但是,下面的声明,一定仅仅是声明: 
    extern int a; 
    这表时,有一个int变量a,它一定是在另外其他地方定义的,所以编译器此时一定不会做什么分配内存的事,因为它就是声明,仅仅表明下面的代码引用了一个符号,而这个符号是int类型的a而已。  
     
    如果是指函数的声明和定义: 
     
    声明:一般在头文件里,对编译器说:这里我有一个函数叫function() 让编译器知道这个函数的存在。 
     
    定义:一般在源文件里,具体就是函数的实现过程 写明函数体。


    struct book{
    	char title[MAXTITL];
    	char author[MAXAULT];
    	float value;
    };
    
    struct book library = {"Go with wind", "Simth John", 23.57f};//C89风格的初始化
    struct book gift = {.author = "John", .title = "new music", .value = 23.2f};//C99风格的初始化
    //也可以对结构体直接赋值
    gift = library //gift的成员列表 和 library的成员列表一样

      








  • 相关阅读:
    475. Heaters
    69. Sqrt(x)
    83. Remove Duplicates from Sorted List Java solutions
    206. Reverse Linked List java solutions
    100. Same Tree Java Solutions
    1. Two Sum Java Solutions
    9. Palindrome Number Java Solutions
    112. Path Sum Java Solutin
    190. Reverse Bits Java Solutin
    202. Happy Number Java Solutin
  • 原文地址:https://www.cnblogs.com/hdu-2010/p/3622488.html
Copyright © 2011-2022 走看看