声明(declaration):意味着告诉编译器关于变量名称、变量类型、变量大小、函数名称、结构名称、大小等等信息,并且在声明阶段不会给变量分配任何的内存。

定义(definition):定义就是在变量声明后,给它分配上内存。可以看成“定义 = 声明 + 内存分配”。

例如:

#include <iostream>
using namespace std;
int addtion(int a,int b);//声明
struct product{unsigned int weight;double price;};//声明 int main(){
cout << "addtion is " << addtion(,) << endl;
product apple,orange;//定义
return ;
}
//定义
int addtion(int a,int b){
return a+b;
}

上面的案例中,

int addtion(int a,int b);
struct product{unsigned int weight;double price;};

上面是声明,它们只是告诉编译器有这个东西,并不会分配内存。

product apple,orange;
int addtion(int a,int b){return a+b;}

上面是定义,给他们会被分配内存。

声明和定义还有一种常见的,就是extern修饰的变量。当使用extern关键字修饰变量(未初始化),表示变量声明。当在另一个文件中,为extern关键字修饰的变量赋值时,表示变量定义。
例如:
header.h

#ifndef HEADER_H
#define HEADER_H
//定义global_x变量 ,在任何包含了该文件的文件中都可以使用global_x变量
int global_x = ; #endif

file.h

#include <iostream>
#include "header.h" extern int global_x;//声明 global_x 变量 int main(){ std::cout << "global_x = " << global_x << std::endl; return ;
}

file.h文件声明了global_x变量,但是globar_x变量的定义是在header.h文件中。

用 g++ file.h -o file 命令编译后会得到可执行文件(file),再用命令 ./file 运行file文件。
结果如下:

global_x = 20;

【C++】C++中变量的声明与定义的区别的更多相关文章

  1. C++ 变量的声明与定义的区别

    变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...

  2. C语言函数及变量的声明与定义的区别

    变量: 1.声明变量不需要建立存储空间,如:extern int a; 2.定义变量需要建立存储空间,如:int a:或者 int b=10:无论变量是否赋值,只要定义它,即占用空间. 3.int a ...

  3. PHP中变量声明和定义的区别

    先记录一下(不知道PHP是不是一样,但是C语言是这样的):把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”.声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用 ...

  4. 【转】变量的声明和定义,从C到编译原理到C++,再到Java

    基础学了太久,时间一长有些东西就可能记得不太清楚,俗话说得好,"好记性不如烂笔头",所以把基础中的基础-变量的声明和定义,从C到编译原理到C++,再到Java用烂笔头记录下来 最早 ...

  5. [转载]C++中声明与定义的区别

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...

  6. 变量的声明和定义以及extern的用法

    变量的声明和定义以及extern的用法                                          变量的声明不同于变量的定义,这一点往往容易让人混淆. l         变量 ...

  7. 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...

  8. JAVA学习笔记:注释、变量的声明和定义、

    本文内容: 注释 变量的声明和定义 成员变量和局部变量 首发时间:2018-03-16 15:59 注释: 单行注释:// 多行注释:/* - */ 变量: 变量是内存中的一个存储区域,变量的定义就是 ...

  9. C++中声明与定义的区别

    如果是指变量的声明和定义: 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存.而 定义就是分配了内存.对于下面的两句代码:void Func(){in ...

随机推荐

  1. TF之RNN:基于顺序的RNN分类案例对手写数字图片mnist数据集实现高精度预测—Jason niu

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_dat ...

  2. python编码问题在此终结

     转载:https://www.cnblogs.com/whatisfantasy/p/6422028.html 1 版本差异概览 1.1 Python 2.X: str(用于8位文本和二进制数据) ...

  3. 6491: Daydream

    题目描述 You are given a string S consisting of lowercase English letters. Another string T is initially ...

  4. 错误 在类中找不到main方法请将main方法定义为 public static void main String args否则JavaFX应用程序类必须扩展javafx-ap

    最近在使用eclipse编写java程序时遇到这样一个问题: 错误在类中找不到main方法,请将main方法定义为 public static void main(String[] args)否则 J ...

  5. hust 1010 The Minimum Length(循环节)【KMP】

    <题目链接> 题目大意: 有一个字符串A,一次次的重写A,会得到一个新的字符串AAAAAAAA.....,现在将这个字符串从中切去一部分得到一个字符串B,例如有一个字符串A="a ...

  6. 解决win10 64位 + Python3 安装PyAutoIt报不是有效win32应用程序的办法

    在win10 64位 + Python3的环境中,安装pyautoit第三方包的时候,报错提示为:不是有效win32应用程序.因为这个问题,进了python群,去寻求答案,却告知为,换32位的电脑,这 ...

  7. Nowcoder牛客网NOIP赛前集训营-提高组(第六场)

    A 拓扑排序+倍增哈希 或者 拓扑排序对于每个点计一个rank,每个点优先选取rank靠前的最小边权点 每次依然按照rank排序更新rank #include<bits/stdc++.h> ...

  8. Eclipse纯净版安装web插件

    打开 Help -> Install New Software. 在Install界面板中,点击Add按钮输入:然后在输入http://download.eclipse.org/releases ...

  9. 2017-9-11-Linux开机启动脚本

    参考文章:https://www.magentonotes.com/ubuntu-config-autostart-shell-script.html 还是先开门见山的说,Linux需要添加开机启动程 ...

  10. C++程序设计方法3:强制类型转换

    强制类型转换(显示转换) dynamic_cast<Dst_Type>(Src_var) Src_var必须是引用或者指针类型,Dst_Type类中含有虚函数,否则会有编译错误: 若目标类 ...