精华内容
下载资源
问答
  • 定义局部变量,其实就是通过移动栈指针,来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间栈上,而栈内存是反复使用的(脏的,上次用完没清零的) ,所以说使用栈来实现的局部变量定义时如果不初始...

    分析一个细节:在C语言中,定义局部变量时如果未初始化,则值是随机的。为什么?

    定义局部变量,其实就是在栈中通过移动栈指针,来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的) ,所以说使用栈来实现的局部变量定义时如果不初始化,里面的值就是一个垃圾值。由此我们扩展一下,其实不仅仅是局部变量,所有的变量在定义时只是在内存中分配一块空间,并没有对这块空间进行任何的初始化。如果这块内存以前被用过,里面的数据还在,那它对于我们来说是没有任何意义的垃圾值。而且有时候这些数据会对我们的编程造成错误。所以我们一定要初始化变量,也就是用新的、有用的数据覆盖掉以前的数据。可能你会有个问题,那些以前用过的内存经过操作系统回收后,为什么里面还有数据。其实操作系统仅仅是回收这些内存,告诉其他程序可以用了,但并不删除这些内存里面的数据。

    展开全文
  • 局部变量(Local variables)...当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。 全局变量在程序开始运行期间就已经在内存开辟了内存空间,直到程序结束才会...

    局部变量(Local variables)与 全局变量:

    在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序或代码块。
    当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
    全局变量在程序开始运行期间就已经在内存中开辟了内存空间,直到程序结束才会释放这块内存空间。
    全局变量要在其他文件中使用,需显示的声明这个变量,使用extern关键字声明(extern int nData;)。

     

    int nData = 10;    // 这是一个全局变量
    
    int main()
    {
        int i = 0;    // 这是一个局部变量,这个变量只在main函数中有效。
        int nData = 100;    // 这也是一个局部变量,但是这个局部变量与全局变量重名了,那么如果访问nData这个变量的时候到底访问的是哪个?
        cout << nData << endl;
        return 0;
    }

     

    这段代码输出的值是100,因为当局部变量与全局变量重名时,访问的是局部变量。否则访问的则是全局变量!

     

     

    局部静态变量:

    局部static变量与全局变量一样,在程序开始运行期间就已经在内存中开辟了空间,直到程序结束才会释放这块内存空间。

    一个局部static变量只定义/初始化一次,后序都不再定义或初始化。

    局部static变量只能在定义的子程序或代码块中访问,不能在外部访问,所以叫局部静态变量。

    全局静态变量:

    全局static变量与局部static变量一样,在程序开始运行期间就分配了内存地址。

    局部static变量只能在定义的代码块中被访问,而全局static变量只能在定义的文件中被访问。不能跨文件访问。

    转载于:https://www.cnblogs.com/LandyTan/p/6400061.html

    展开全文
  • 根据应用范围,变量可分为以下几类● 局部变量局部变量仅适用于定义这些变量的块。● PLC 变量:PLC 变量适用于整个 PLC。程序中多数指令都通过变量来操作。 为指令分配变量后,即会使用指定变量的值来执行该...

    什么是变量?

    变量是用于程序的,可以有不同值的变量。  根据应用范围,变量可分为以下几类

    ●  局部变量:  局部变量仅适用于定义这些变量的块。

    ●  PLC 变量:PLC  变量适用于整个 PLC。

    程序中多数指令都通过变量来操作。  为指令分配变量后,即会使用指定变量的值来执行该指令。

    变量在 TIA Portal 中集中管理。  在程序编辑器中创建 PLC  变量与在 PLC  变量表中创建 PLC 变量没什么区别。  如果在程序或 HMI  画面的多个位置使用某个变量,则对该变量所作的更改会立即在所有编辑器中生效。

    变量的优点在于可以集中更改程序中使用的寻址方式。  若没有变量提供的符号寻址功能,则每次 PLC  输入和输出的组态发生变化时,在用户程序中反复使用的寻址方式必须在程序中的多个位置进行更改。

    PLC 变量由以下部分组成: 

    ●  名称(例如,CONVEYOR_ON):  变量名称只对一个 PLC  有效,并且在整个程序和此特定 PLC  中只能出现一次。

    ●  数据类型(例如,BOOL ):  数据类型定义值的表示形式和允许的值范围。  例如,通过选择 BOOL  数据类型,即指定变量只接受二进制值“0”和“1”。

    ●  地址(例如,M 3.1):变量地址是绝对地址,定义变量读值或写值的存储区。  输入、输出和位存储区均为可能的存储区实例。可以使用输入 (I)  和输出 (Q)  存储区对过程映像寻址。 

    过程映像包含 PLC  模块输入和输出的映像:

    ●  PLC 的操作系统在每个程序循环都会刷新过程映像中输入的信号状态。

    ●  过程映像中输出的信号状态在每个程序循环由 PLC  的操作系统写入到相应输出模块的输出。

    机器或过程通常通过输出的信号状态来控制。

    下图显示了 PLC  变量表、用户程序中的变量、位存储区以及 PLC  的输入和输出在理论上是如何互相链接的。

    1f883aa306d1414d4ec0b22f7f478675.png

    位存储区主要用于保存中间结果。  在位存储区中寻址的变量值存储在系统存储器中,并

    且不会传送给模块。  变量的数据类型决定变量在存储器中占用的存储空间。  例如,BOOL 数据类型的变量在存储器中仅占用一位。INT 数据类型的变量在存储器中占用 16 位。  变量不允许在一个存储区中重叠。  变量的地址必须唯一。

    PLC 变量表

    PLC 变量表包含对于某个 PLC  有效的变量和常量的定义。  系统会为项目中创建的每个 PLC 自动创建一个 PLC  变量表。

    下表给出了“变量”(Tags)  选项卡中各表格列的含义:

    764487434ca5d04bc78209cb6355f2b1.png

    可以单击该符号,以便通过拖放操作将变量移动到程序段中以用作操作数。

    名称

    为变量定义的且在整个 PLC  中唯一的名称。

    数据类型

    为变量指定的数据类型。

    地址

    变量地址。

    保持性

    保持性变量的值将保留,即使在电源关闭后也是如此。 

    监视值

    PLC  中的当前数据值。 

    仅当在线连接可用并选择“监视”(Monitoring)  按钮时,此列才会出现。

    注释

    用于记录变量的注释。

    定义和互连 PLC  变量

    在 TIA Portal 中,可以在程序段中创建用户程序时直接创建变量。  以下步骤介绍了如何定义 PLC  变量以及将插入的 LAD  指令与 PLC  变量互连。LAD  指令根据变量值执行,以此来控制机器的启动和关闭。

    要将 LAD  指令与 PLC  变量互连,请按以下步骤操作:

    1.   打开组织块“Main [OB1]” 的第一个程序段。

    2.   在常开触点的操作数占位符中输入名称 "ON_OFF_Switch" 。

    2009cccc8382b6ef193c0d9fa7d66198.png

    3.   按回车键确认输入内容。

    5eeb8ec197626145bd0ffb8298202f66.png

    4.   打开“定义变量”(Define tag)  对话框。

    4fce6bb78f8caa1b399e7e697e0d4aae.png

    5.   定义 "ON_OFF_Switch"  变量。

    778786cad43854f684ecf64be1ce3b27.png

    6.   在“输出线圈” 指令的操作数占位符中输入名称 "ON" 。

    03c10427412298227b02254a6924424b.png

    7.   按回车键确认输入内容。

    8.   打开“定义变量”(Define tag)  对话框。

    f4d5eda288fd7db959c56c333f9ed706.png

    9.   定义“ON”变量。

    7fd7ec078e0ebab7b700388291659e37.png

    10. 在“取反线圈” 指令的操作数占位符中输入名称 "OFF" 并定义相应变量。

    11. 单击工具栏上的“保存”(Save)  按钮以保存该项目。

    结果: 编写了一个打开和关闭实例机器的按钮开关程序。 

    43db12607a26214bd7be4cf937e0d7c8.png

    例如:

    以下步骤将介绍如何定义扩展程序所需的变量。  还将介绍如何在 PLC  变量表中创建变量。

    要定义所需的变量,请按以下步骤操作:

    1.打开 PLC  变量表。

    a228905a9c67d33a7d73f275398de67e.png

    PLC 变量表在工作区中打开。  变量表中列出在项目的第一部分中所定义的变量。

    2.定义变量“LS_1” 与地址“M1.0” 。

    108d698381d867918a30eeb825d4395a.png

    3.选择“名称”(Name)  为“LS_1” 的变量的单元格并单击单元格右下角的填充标记。

    257b372f9b03282fbe65e187d0feb3de.png

    4.将单元格的内容传送给下面的两个单元格。

    da37228fde65415c02171b0d7b1b9ce1.png

    传送内容时使用连续编号。

    定义其他变量:

    0e1d5469a89265ef85857d51e08ec660.png

    已经定义了扩展程序所需的变量。  已定义的变量列在了 PLC  变量表中。

    ------------------END---------------

    每天进步一点点

    Make small but daily progress

    展开全文
  • 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。 当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量...

    一、局部变量与全局变量

    python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量

    • 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
    • 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
    • 当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用

    (1)局部变量外部访问

    def change_name():
        name = '局部变量'
        print('函数内部修改name值为:', name)
    
    
    change_name()
    print('函数外部打印name的值为:', name)
    
    """
    运行结果:
    函数内部修改name值为: 局部变量
        print('函数外部打印name的值为:', name)
    NameError: name 'name' is not defined
    
    """

    说明:报错可以看出,在外部访问函数内部的局部变量是不可行的,因为局部变量name的作用域只在change_name()中

    (2)函数内部访问全局变量且修改全局变量

    def change_name(name):
        print('函数内部修改name值之前为:', name)
        name = '局部变量'
        print('函数内部修改name值为:', name)
    
    
    change_name(name)
    print('函数外部打印name的值为:', name)
    
    """
    运行结果:
    函数内部修改name值之前为: 全局变量
    函数内部修改name值为: 局部变量
    函数外部打印name的值为: 全局变量
    """

    说明:可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响

    ????????老夫不能接受这个肤浅的解释,那我们打印出变量的内存地址试试

    def change_name(name):
        print('函数内部修改name值之前为的内存地址为:', id(name))
        name = '局部变量'
        print('函数内部修改name值之后的内存地址为:',id(name))
    
    
    change_name(name)
    print('函数外部打印name的内存地址值为:', id(name))
    
    """
    运行结果:
    函数内部修改name值之前为的内存地址为: 2147662653208
    函数内部修改name值之后的内存地址为: 2147663637912
    函数外部打印name的内存地址值为: 2147662653208
    """

    说明:任性的我这下明白了,在函数内部修改之后,会在内存中重新开辟一块内存地址,与之前外面的全局变量的地址不搭嘎啊,所以不会影响全局变量的值

    (3)全局与局部变量名一样

    说明:因为在change_name()函数使用了局部变量name,它只是个跟全局变量同名的局部变量,使用前还是要赋值,不赋值就使用就是不合法,再或者说:如果内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量,又因为函数中没有name的定义和赋值,所以报错,但是如果你不修改,那么不会报错

    二:全局/局部变量中的复杂数据类型

    name = [1, 2, 3, 4]
    
    
    def change_name():
        print('函数内部打印name[0]的内存地址:', id(name[0]))
        name[0] = name[0] + 1
        print('函数内部打印name[0]的内存地址:', id(name[0]))
        print('函数内部打印name[0]的值:', name[0])
    
    
    change_name()
    print('函数外部打印name[0]的内存地址:', id(name[0]))
    print('函数外部打印name[0]的值:', name[0])
    
    """
    运行结果:
    函数内部打印name[0]的内存地址: 140719482123088
    函数内部打印name[0]的内存地址: 140719482123120
    函数内部打印name[0]的值: 2
    函数外部打印name[0]的内存地址: 140719482123120
    函数外部打印name[0]的值: 2
    """

    说明:可以看出这里在函数内部修改全局变量可以,并且修改之后,全局变量的值也改变了,根据运行结果可以看出,其实操作的都是同一块内存地址的值,特别说明:复杂的数据类型;如列表,字典,集合,类,都可以函数内部修改

    三、关键字global与nonlocal的使用

    特别说明:千万不要在函数内部强制性修改全局变量本身的值,你不知道有多少个地方引用这个全局变量,万一出了问题,调试到你想死

    (1)A:在函数里面修改全局变量本身

    name = '全局变量'
    def change_name(n):
        global name
        name = n
        print('函数内部打印name的值:', name)
        print('函数内部打印name的内存地址值:', id(name))
    
    
    change_name('global')
    print('函数外部打印name的值:', name)
    print('函数外部打印name的内存地址:', id(name))
    
    
    """
    运行结果:
    函数内部打印name的值: global
    函数内部打印name的内存地址值: 2170632629640
    函数外部打印name的值: global
    函数外部打印name的内存地址: 2170632629640
    """

    说明:可以看书这里修改是同一块内存地址的变量值,使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思

    B: 多层函数嵌套变量使用

    说明:使用了未定义的局部变量,然而num1也不是全局变量,只是count2函数的外层变量,强行使用global定义num1的话同样会报错

    C:多层函数嵌套使用global(回答了上面B中为什么强行添加global,也会报错)

    说明:在函数count2内 global 定义的变量 num1,只能在 函数 count2内引用, 如果要在 add_one内修改,必须在 add_one 函数里面声明 再global  num1 ,表明是修改外面的 全局变量 num1.相当于你声明了,才能引用修改(2)

    (3)nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量

    def count2(n):
        num1=n
        print('外层变量num1的内存地址:',id(num1))
    
        def add_one():
            nonlocal num1
            print('内层变量num1的内存地址:', id(num1))
            num1 += 1
            return num1
    
        return add_one()
    
    
    num3 = count2(4)
    """
    运行结果:
    外层变量num1的内存地址: 140719532454832
    内层变量num1的内存地址: 140719532454832
    """

    说明: nonlocal  适用于在局部函数 中 的局部函数, 把最内层的局部 变量设置成外层局部可用,但是:但是还不是全局的,故不能在外部引用该变量

    展开全文
  • 全局与局部变量1、在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。2、全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。3、当全局变量与局部变量同名时:在定义局部变量...
  • deffunc():x="Python"print(x)print(s)s="Nhooo"print(s)func()print(x)上面的程序中-x是局部变量,而s是全局变量,我们只能在定义的函数中访问局部变量(上面的func()),然后尝试其作用域(func())之外调用局部...
  • 编写一个程序定义局部变量sum,并求出1+2+3+...+99+100之和,并赋值给sum,并输出sum的值。 分析: 局部变量:一个函数(或称方法)或函数内代码块中定义的变量。使用时需注意。 采用累加的方法进行运算,...
  • 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。 当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量...
  • 本文实例讲述了Python3.5局部变量与全局变量作用域。分享给大家供大家参考,具体如下:1、局部变量与全局...当局部变量与全局变量同名时,在定义局部变量的子程序内局部变量其作用;其他地方全局变量起作用。#!/u...
  • 定义局部变量,其实就是通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不...
  • 本文实例讲述了Python3.5局部变量与全局变量作用域。分享给大家供大家参考,具体如下:1、局部变量与全局...当局部变量与全局变量同名时,在定义局部变量的子程序内局部变量其作用;其他地方全局变量起作用。#!/u...
  • - 程序结束释放函数体中定义变量通常是栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是堆上。所有函数体外定义的是全局量,加了static修饰符后不管哪里都存放全局区(静态区),所有...
  • 转载地址:http://blog.csdn.net/zzp_403184692/article/details/8014235今天编写一个多线程程序,发现方法内定义内部类时,如果内部类调用了方法变量,那么该变量必须申明为final类型,百思不得其解,后来想到...
  • 1) 主函数main中定义变量(m, n)也只主函数中有效,不会因为主函数中定义整个文件或程序中有效。主函数也不能使用其他函数中定义变量。 2) 不同函数中可以使用同名的变量,它们代表不同的对象,互不干扰...
  • C++static声明静态局部变量在C++,有时会希望函数中局部变量的值函数调用结束后不消失,而保留原来的值,也就是其占用的存储单元不释放,下一次调用该函数时,这个变量还保留上一次函数调用结束时的值,这是就...
  • 2:局部变量定义在方法的变量 方法内部的变量 方法的形参 代码块的变量,一对{} 3,注意 成员变量默认是有默认值。如:float,默认0.0; 局部变量没有默认值,必须初始化才可以使用 三:变量的作用域:指...
  • 一个程序中,有且仅有一个变量定义变量声明:描述其它地方创建的对象,可以多次出现。用extern声明一个变量。 例如说,如果程序之前没有出现过a这个变量,这时候要使用a,要使用变量定义,为其分配存储空间,...
  • 1.1static的引入 我们知道函数内部定义变量,当程序执行到它的定义处时,编译器为它栈上分配空间,函数栈上分配的空间此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数变量的值保存至...
  • 定义在函数的自动型(就是不用static修饰)数组,函数被调用时才创建,而函数结束后就自动销毁了,那么函数执行过程对它的操作就白费了。 定义成static型后,编译时就为其分配内存空间并永久性保留着,直到程序...
  • 一、变量局部变量就是有一个小作用域的变量,在子程序中...(可以用global声明来改)在子程序中定义的变量称为局部变量在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序,局部变量作用域是定义该变...
  • 全局变量是整个py文件声明,全局范围内都可以访问局部变量某个函数声明的,只能该函数调用它,如果试图超出范围的地方调用,程序就爆掉了如果函数内部定义与某个全局变量一样...
  • .类体,变量定义部分所定义的变量称为类的________。...成员变量和局部变量的类型可以是Java的任何一种________。.用修饰符________说明的成员变量是类变量。.变量的名字与成员变量的名字...
  • 概念首先得明白局部变量,静态局部变量,全局变量,静态全局变量这几个概念,以下面程序举例://main....全局变量:具有全局作用域,全局变量只需一个源文件中定义,就可以作用于所有的源文件。 静态全局变量:具有全
  • 点击上方“C语言入门到精通”,选择置顶第一时间关注程序猿身边的故事作者闫小林白天搬砖,晚上做梦。...同样,复合语句中定义的变量只本复合语句范围内有效,如下就是局部变量:#include//头文件 usingnames...
  • 局部变量(Local variables):方法内部(包括main()方法)定义的变量是局部变量。所有局部变量都是方法被调用时分配空间,系统不会自动对他们进行赋值,所以必须先给局部变量赋初值之后才能使用。全局变量和...
  • 全局变量是整个py文件声明,全局范围内都可以访问局部变量某个函数声明的,只能该函数调用它,如果试图超出范围的地方调用,程序就爆掉了如果函数内部定义与某个全局变量一样...
  • 局部变量:在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用 全局变量:在一个文件顶部定义的变量,可以供该文件中任意函数调用 全局变量与局部变量两者的本质区别就是在于作用域。全局...
  • 环境变量存储shell会话和工作环境信息,允许内存存储数据,让程序和脚本能快速访问,存储了持久的数据 分类 全局变量 局部变量 注意:不同的linux发行版有自己的环境变量 全局环境变量 系统环境变...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,379
精华内容 2,151
关键字:

在程序中定义局部变量