精华内容
下载资源
问答
  • PID算法、C语言自动变量、OPENCV色彩空间、像素运算 PID算法 学习资源:https://www.bilibili.com/video/av51635389/?p=8 对PID算法有了一定的理解 C语言自动变量 自动变量解释 OPENCV色彩空间、像素运算 RGB HSV ...

    2019.07.21学习总结@TOC

    PID算法、C语言自动变量、OPENCV色彩空间、像素运算

    PID算法

    学习资源:https://www.bilibili.com/video/av51635389/?p=8
    对PID算法有了一定的理解

    C语言自动变量

    自动变量解释在这里插入图片描述

    OPENCV色彩空间、像素运算

    RGB
    HSV
    HIS
    YCrCb
    YUV
    色彩空间相互转换

    下面是像素运算相关代码

    import cv2 as cv
    import numpy as np
    
    def add_demo(m1, m2):
        dst = cv.add(m1, m2)
        cv.imshow("add_demo",dst)
    
    def subtract_demo(m1, m2):
        dst = cv.subtract(m1, m2)
        cv.imshow("subtract_demo",dst)
    
    def divide_demo(m1, m2):
        dst = cv.divide(m1, m2)
        cv.imshow("divide_demo",dst)
    
    def multiply_demo(m1, m2):
        dst = cv.multiply(m1, m2)
        cv.imshow("multiplyt_demo",dst)
    
    
    def others(m1, m2):
        M1,dev1 = cv.meanStdDev(m1)
        M2,dev2 = cv.meanStdDev(m2)
        h, w = m1.shape[: 2]
    
        print(M1)
        print(M2)
    
        print(dev1)
        print(dev2)
    
        img = np.zeros([h, w], np.uint8)
        m, dev = cv.meanStdDev(img)
        print(m)
        print(dev)
    
    print("-----------Hello Python------------")
    src1 = cv.imread("D:\\opencv\\opencv\\sources\\samples\\data\\LinuxLogo.jpg") 
    src2 = cv.imread("D:\\opencv\\opencv\\sources\\samples\\data\\WindowsLogo.jpg") 
    print(src1.shape)
    print(src2.shape)
    cv.namedWindow("image1",cv.WINDOW_AUTOSIZE)
    cv.imshow("image1",src1)
    cv.imshow("image2",src2)
    
    #add_demo(src1,src2)
    #subtract_demo(src1,src2)
    #divide_demo(src1,src2)
    #multiply_demo(src1,src2)
    others(src1,src2)
    
    cv.waitKey(0)
    
    cv.destroyAllWindows() 
    
    展开全文
  • C语言自动变量的潜在问题

    千次阅读 2010-06-07 12:56:00
    关于C语言自动变量的一个基本规则是:声明自动变量的函数已经返回后,不能再引用这些自动变量。 <br />下面就此问题进行测试。 测试环境:  编译器:GCC 4.2.4  OS:Ubuntu 8.04 ...

    关于C语言自动变量的一个基本规则是:声明自动变量的函数已经返回后,不能再引用这些自动变量。

    下面就此问题进行测试。
    测试环境:
        编译器:GCC 4.2.4
        OS:Ubuntu 8.04 LTS

    首先编写一个简单的C程序,暂且命名为test_auto_val.c。 

     

    在这个程序中,main()函数里面的ptr指针引用了已经返回的函数func1()中声明的自动变量val。
    编译运行这个程序,输出结果为5,看起来似乎并没有出现问题,但是我们的确引用了已经返回的函数中声明的自动变量。

    接下来,修改test_auto_val.c的内容,将main()函数修改为: 

     

    只是增加了一条printf语句,并且与上一行一模一样。在我的系统的本次运行中,得到的结果是:
        5
        -1078398860
    问题出现了,为什么两次输出会不一样呢?

    程序运行时,系统会为之分配一个栈,而程序中的每个函数在被调用时会占据这个栈的一部分,称为这个函数的栈帧,自动变量的存储空间就分配在函数的栈帧上。

    现在来分析这两个程序的运行。

    第一个程序运行时,系统为之分配栈空间,然后main()函数被调用,在栈空间里创建自己的栈帧。随后,在main()函数中func1()被调用,func1()也在栈空间创建自己的栈帧。func1()的栈帧在main()的栈帧之下(假设栈顶向低地址扩展),自动变量val分配在func1()的栈帧上。当func1()返回后,逻辑上认为func1()的栈帧已经不存在。但是,事实上在栈空间中,为自动变量val分配的内存单元并没有被改变。因此,当我们在main()函数中使用指针引用其值时,仍然得到了正确的结果。

    那修改以后的程序为什么会得到两个不同的值呢?因为printf()函数被调用时也会创建栈帧,而这个栈帧覆盖了func1()的栈帧曾使用过的空间,破坏了自动变量val的内存单元的值。事实上,当我们执行第一条printf语句时,我们将*ptr(注意,这已经是一个int类型的值)作为参数传递给printf()函数,而在进行*ptr这个运算的时候,printf()函数尚未被调用,因此我们得到了正确的值。而执行第二条printf语句时,上一次的printf()函数的调用已经破坏了func1()的栈帧曾使用过的栈空间,因而不能再得到val的值。

    下面,再次修改test_auto_val.c来验证以上分析: 

     

    增加了函数func2(),并且在main()函数中执行第一条printf语句后调用func2(),然后再次输出ptr指向的内存单元的值。在func2()中定义了与func1()相同的变量,目的是以同样的结构覆盖func1()的栈帧。
    运行程序,得到如下结果:
        5
        9
    从运行结果可以看出func1()的栈帧确实被func2()覆盖了。

    前面提到了*ptr作为参数调用printf()函数之时已经是一个int类型的值,也就是说printf()函数被调用前我们已经取出了val内存单元的值,正因为如此,printf()函数才会输出正确的结果。事实上,如果我们用字符串来做这个测试将不能在main()函数中输出字符串的值。同样,可以通过修改test_auto_val.c来验证:

     

    运行程序,输出的很有可能是乱码,或者是其它东西,总之不是我们在func1()中定义的字符串。这是因为对字符串的访问是在printf()函数调用以后通过作为参数传入的ptr指针来实现的,而此时func1()的栈帧已经被printf()的栈帧覆盖了。

    展开全文
  • C语言 静态变量与自动变量的区别

    万次阅读 多人点赞 2017-10-19 13:18:18
    C语言中使用auto 关键字声明自动变量,使用static关键字声明静态变量。

           C语言中使用auto 关键字声明自动变量,使用static关键字声明静态变量。

           在函数中定义局部变量时,如果没有被声明为其他类型的变量都是自动变量。在编写代码时,有时需要在调用函数中的某个局部变量以后,这个变量的值不消失,并且保持原值不变,也就是该函数所占用的存储空间不被释放,在下次调用该函数时,变量中的值是上次调用该函数结束时变量的值。这时,使用的变量类型是静态变量,使用static 关键字进行声明。

     

           静态变量与自动变量的区别主要表现在:

    Ⅰ )静态存储类型的局部变量是在静态存储区内分配内存单元,在程序的整个运行期间内都不释放空间。而自动类型的局部变量属于动态存储类型,是在动态存储区内分配存储单元的,函数调用结束后存储单元即被释放。


    Ⅱ)静态局部变量是在编译时赋初始值,并且只赋一次初值,在以后每次调用函数时,只是使用上一次函数被调用结束时变量的值。而自动局部变量的初值不是在编译时赋予的,而是在函数调用时赋予的,每调用一次函数都会对变量重新赋一次初值。


    Ⅲ)如果调用的静态局部变量没有对其进行赋值,则该变量的默认值为0后者为空字符串。而对于自动局部变量来说,如果不赋值,则变量的值是一个不确定的值,这是因为在函数被调用时,会为该变量分配一个存储空间,在函数结束时,存储空间被释放,这两次分配的存储空间是不一样的,存储空间中的值也是不确定的。

              

           程序举例:

    #include <stdio.h>
     
    void test()
    {
        auto a = 0;              //定义自动存储类型变量
        static int b = 3;         //定义静态存储类型变量
        a++;
        b++;
        printf("%d\n", a);        //输出a
        printf("%d\n", b);        //输出b
     
    }
    int main()
    {
        int i;
        for (i = 0; i < 3; i++)
        {
            test();              //调用test函数
        }
        return 0;
    }
           该程序执行的结果为: 1 4 1 5 1 6;

           在程序test函数中首先定义了一个自动存储类型变量 a 赋初值 0.定义了一个静态存储类型变量b 赋初值 3;在main 函数中,通过循环3 次调用  test 函数。在第一次调用时,a=0,b=3;执行{a++;b++;} a=1,b=4。第二次调用时,变量a的值为0,b的值为4,因为a 声明为自动变量,函数调用结束后存储空间的值被释放,因此在第二次调用时,使用的是函数的初值,变量b 被声明为静态类型的变量,在第二次调用函数是,使用第一次函数被调用结束时变量的值4,所以执行结果为 a 的值为1,b的值为5,同理,第三次调用时,变量a使用初值0,而变量b 使用的二次调用结束是的值5, 故第三次调用执行结果a 的值为1,b的值为 6。

    展开全文
  • 定义局部变量的时候没有加static 是自动变量(一般数据类型加上变量名的方式定义变量等到的就是自动变量) 定义局部变量的时候加了static是静态变量 局部静态变量的初始化语句在第一次执行的时候执行一次,以后再也不...

    参考链接
    全局变量 局部变量 自动变量 静态变量

    静态变量和自动变量的区别

    声明区别

    • 定义局部变量的时候没有加static 是自动变量(一般数据类型加上变量名的方式定义变量等到的就是自动变量)
    • 定义局部变量的时候加了static是静态变量 局部静态变量的初始化语句在第一次执行的时候执行一次,以后再也不执行

    存储区别

    • 局部变量是在静态存储区内分配内存单元,在整个程序运行期间都不释放 局部变量的生命周期跟随程序的生命周期
    • 自动变量(一遍形式声明的变量)是存储在动态存储区域(栈) 在函数执行完成后销毁

    其他区别

    • 静态局部变量在编译时完成赋予初值,并且只赋一次值,以后函数再次被调用的时候只是用上次函数被调用结束时变量的值,而自动变量的初值不是在编译期赋值的,是在函数被调用的时候赋值的,每一次函数都会对变量进行重新赋值
    • 静态变量如果没有赋初始值的话,静态变量的初始值为0或者为空字符串,自动变量来说他的初始值是不确定的值,因为函数被调用是会为变量分配一个内存空间,在函数结束的时候,存储空间被释放,两次分配的存储空间是不一样的,存储空间的值也是不确定的。

    全局变量和局部变量

    • 全局变量在函数体外定义的变量
    • 局部变量在函数体内定义的变量

    编译器采用就近原则,当有两个变量的名称相同时(一个全局变量一个局部变量)取最接近的变量进行处理。即当全局变量与局部变量冲突时,全局变量服从局部变量;

    全局变量的作用域

    全局变量的作用域是从变量定义开始到文件结束(不考虑被外部文件引用的情况下)

    可以使用extern关键字来扩大全局变量的作用范围
    extern被用将全局变量的作用范围扩大到另一个文件中去

    // onefile.c
    # include <stdio.h>
    void f (void);
    int main(void) {
        extern int number;
        printf("%d\n", number);
        return 0;
    }
    // twofile.c
    int number  = 0;
    void f(void) {
        return;
    }
    

    总结

    • 提倡定义全局常量 避免定义全局变量
    • 编译器采用就近原则
    • 自动变量的初始值为不确定的值
    • 要调用其他文件中的全局变量使用extern声明下
    • 要防止其他文件调用本文件的全局变量要在本文件的全局变量的声明的数据类型之前加上static关键字
    展开全文
  • #include void auto_static (void){int autoVar = 1;static int staticVar = 1;printf ("automatic = %i, static = %i\n", autoVar, staticVar);++autoVar;++staticVar;}int main (void){int i;...
  • 谈起变量的类型,映入眼帘的首先可能是静态变量、自动变量;也可能是外部变量、内部变量;或许还会有全局变量、局部变量、寄存器变量...总之,不免让人感到头大。 那么今天我就借助《C程序设计语言》与《C和指针》...
  • 局部变量C语言局部变量的存储类别自动变量静态局部变量寄存器变量 自动变量 auto int b,c=3; auto可以省略,不写与 int b,c=3;等价 静态局部变量 下面展示例子 static。 #include<stdio.h> int main() { int ...
  • C语言变量存储类型

    2019-09-28 22:38:55
    C语言中对变量的说明包括两方面的内容:变量类型以及变量的存储...局部变量是指在函数内部说明的变量(有时也称为自动变量),用关键字auto进行说明。 所有的非全程变量都被认为是局部变量,所以auto实际上从来不用...
  • C语言寄存器变量

    千次阅读 2019-01-06 11:21:21
    寄存器存在于CPU内部,运算速度非常快, 因为...对于VC编译器会自动优化,即使没有声明寄存器变量,VC也会自动优化。 对于GCC编译器就不会自动优化。 定义一个寄存器变量: void main(){ register int i = 0...
  • C语言变量存储类别

    2019-07-19 09:46:08
    C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在...自动变量;函数调用时的现场保护和返回地址等。 C...
  • c语言 函数变量

    2012-04-06 23:03:48
    c语言定义了四种存储属性即自动变量,外部变量,静态变量和寄存器变量 变量保存时间来分:从时间的角度,分为静态存储和动态存储两种情况。 变量作用域范围,从空间来分,全局变量和局部变量。 1.自动变量 函数...
  • C语言变量的存储类别

    千次阅读 2019-06-07 17:59:18
    C语言变量的存储类别: 自动类型(auto) 寄存器类型(register) 静态类型(static) 外部变量(extern) 自动类型(auto) 自动类型(auto)变量是存储在动态存储区的变量。 关键字:auto 一般形式为:auto 类型 变脸...
  • C语言变量存储类别

    2017-11-22 18:12:00
    C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量...自动变量...
  • C语言修饰变量的关键字程序在内存中的分段变量的属性变量的分类修饰变量的关键字 程序在内存中的分段 当程序开始运行后,会加载到内存中,会把内存分成若干段,每一段的功能、权限不同。 代码段(txt):程序中的二...
  • C语言变量的存储类型: 变量的存储类型:是指存储变量值的内存类型。 变量的存储类型决定了 变量何时创建、何时销毁、保持多久。 有三个地方可以存储变量:普通内存、运行时堆栈、硬件寄存器。 变量的缺省...
  • c语言寄存器变量

    2016-08-10 13:46:00
    寄存器存在于CPU内部,运算速度非常快, 因为... 对于VC编译器会自动优化,即使没有声明寄存器变量,VC也会自动优化。  对于GCC编译器就不会自动优化。  定义一个寄存器变量: 2 3 void main() 4 { 5 ...
  • auto 自动变量 register 寄存器变量 extern 外部变量 static 静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。 在介绍了变量的存储类型之后,可以知道对一个变量的说明...
  • c语言变量存储方式

    2017-03-03 10:10:14
    c语言变量存储方式 静态存储方式与动态存储方式(具体:自动的、静态的、寄存器的register、外部的extern)在内存中的用户的存储空间分为:程序区、静态存储区、动态存储区。静态存储方式:在程序运行期间,系统对...
  • PAGE / NUMPAGES 一.C语言中从变量的作用域角度来分可以分为全局变量和局部变量 二.变量值存在的时间角度来分可以分为静态存储方式和动态存储方式所谓静态存储方式是指在程序运行期间有系统分配固定的存储空间的方式...
  • 全局变量 定义 全局变量:定义在函数外部的变量 #include<stdio.h> int gA=10; //全局变量 void f() { printf("f %d",gA); //f 10 } int main() { ...没有初始化的全局变量自动补...
  • C语言动态存储方式与静态存储方式 静态存储方式是指在程序运行期间由系统分配固定的...函数中定义的没有用关键字static声明的变量,即自动变量。 函数调用时的现场保护和返回地址等。 在C语言中,每一个变量和函数都
  • c语言局部变量默认初始值

    千次阅读 多人点赞 2018-04-09 15:29:48
    C语言中,定义局部变量时如果未初始化,则值是随机的,这是为什么呢?定义局部变量,其实就是在...c语言中只有局部变量在未赋初值时,才是随机数,全局变量和静态变量未赋初值时编译器会自动将其初始化为0。局部变量...
  • 在所有的编程语言中变量是有寿命的,就像我们人类似的到了一定岁数就要驾鹤西去。这篇我们就讲讲变量的寿命。说到变量的寿命(术语叫做生命...auto(自动的): 这是函数内部定义变量的缺省存储方式。auto变量的作用...
  • C语言变量存储分配

    2012-03-09 18:45:39
    最近看了一些关于C语言变量存储机制的资料,觉得还有有一些东西不太理解,自已想做一个整理,这是第一次在在CSDN上发表这样的带点原创的技术的文章。...还有一种方式是自动分配,它支持自行变量,如函数体的参数和
  • c语言中变量的类型那么几个能把人绕晕,反正我是...自动变量:auto int a,这是最常见的,auto一般是省略的。 全局变量:无关键字,由声明位置决定。 静态变量:static int a, 外部变量:extern int a, 形式参数

空空如也

空空如也

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

c语言自动变量

c语言 订阅