精华内容
下载资源
问答
  • C语言学习中的知识点,字符串指针字符数组的区别,静态全局变量、静态局部变量全局变量和局部变量区别, 有错误的地方请大家指正! 以下程序用VC++6.0调试 先说说字符串指针字符数组的区别 1. 相同点: /*...
      
    

    C语言学习中的知识点,字符串指针和字符数组的区别,静态全局变量、静态局部变量、全局变量和局部变量的区别,
    有错误的地方请大家指正!
    以下程序用VC++6.0调试
    先说说字符串指针和字符数组的区别
    1.      相同点:
    /*  用字符数组实现字符串操作 */
    main( )
    {
    charstr[]="Welcome to study C !";  
    int i;
    printf("%s\n",str);  
    for(i=0;i<=7;i++)       
    printf("%c",str[i]);  //用*(str+i)也行
    printf("\n");
    }
              
    /*  用字符指针实现字符串操作  */
    main()
    {
    char *str="Welcome to study C !";
    int i;
    printf("%s\n",str); 
    for(i=0;i<=7;i++) 
    printf("%c",*(str+i)); //用str[i]也行
    printf("\n");
    }
     
    2.      不同点:
    a)      赋值方式不同,字符数组只能对各个元素分别赋值,而字符指针只需赋给字符串的首地址就可以了。
    如:  char *str;
              str="Welcome to study C !";
    以下对字符数组的赋值是错误的:
              char str[80];
              str[ ]="Welcome to study C!";
    b)      字符指针指向字符串,"hello"是一个字符串常量,与之相关联的内存空间位于内存的只读部分,如:
                          char ch[] = "china\n";
                          char *p;
                          char *pp = "CHINA\n";
                          p = ch;
                          *(p+2) = 'h';//就是可以的
                          *(pp+2) = 'h';//此处在编译时不会出错,在执行的时候会出错

     c)   函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通的指针类型,对于void func (char sa[100],int ia[20],char *p),则sa的类型为char*,而不是char[100]类型 


    下面介绍一下字符串常量和字符串变量:
     
    1.     字符串常量:
    a)      定义:是一对双引号括起来的字符序列
    b)      字符串包含的字符个数:不包括系统自动赋的’\0’,转义字符算1个
    c)      所占的字节数:字符串所包含的字符个数加1
    d)      长度:从第一个字符到第一个’\0’之间的字符个数,哪怕’\0’就在原字符串中
    e)      无论字符串常量还是字符串变量,空字符串可以存在””,而空字符是错误的’’
    2.     字符串变量:
    a)      C语言本身没有设置一种类型来定义字符串变量,字符串的存储完全依赖于字符数组,但字符数组又不等于是字符串变量,例如:
    Char str[] = {‘a’,’b’,’c’,’\0’};是str[4],是字符串
    Char str[] = {‘a’,’b’,’c’};是str[3],是字符数组
    Char str[7] = “string!”;可能破坏其他数据
    b)      在scanf,printf,gets,puts中的str不用写成str[10],只能写成str

    下面介绍下静态全局变量,静态局部变量,全局变量,局部变量的区别  
     
    1.    从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用 extern 关键字再次声明这个全局变量。
    2.    静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
    3.    静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被 static 关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
    4.    从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。(扩展内存分配)
    5.    把局部变量改变为静态变量后是改变了它的存储方式即增加了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
     
    程序的内存分配
     
    1.    程序占用的内存分为以下几个部分
    a)      栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    b)      堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
    c)      全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。
    d)      文字常量区:常量字符串就是放在这里的。程序结束后由系统释放
    e)      程序代码区:存放函数体的二进制代码。
    2.    例子程序 
    //main.cpp 
    int a = 0; 全局初始化区 
    char *p1; 全局未初始化区 
    main() 

    int b; 栈 
    char s[] = "abc"; 栈 
    char *p2; 栈 
    char *p3 = "123456"; 123456\0在常量区,p3在栈上。 
    static int c =0;全局(静态)初始化区 
    p1 = (char *)malloc(10); 
    p2 = (char *)malloc(20); 
    分配得来得10和20字节的区域就在堆区。 
    strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"
    优化成一个地方。 

    因此 static 这个说明符在不同的地方所起的作用是不同的。
    若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; 
    设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
    如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用 static 变量(这样的函数被称为:带“内部存储器”功能的的函数)  
    函数中必须要使用static 变量情况:比如当某函数的返回值为指针类型时,则必须是static 的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
    static 全局变量:改变作用范围,不改变存储位置;static 局部变量:改变存储位置,不改变作用范围;静态函数 :在函数的返回类型前加上static 关键字,函数即被定义为静态函数,只能在声明它的文件当中可见,不能被其它文件使用。
    初始化
    如果括号中提供的处置个数大于数组长度,则会出错。如果初值小于数组长度,则将字符赋值给数组中前面的对应元素,其余元素自动填充空字符‘\0’。
    格式化输出字符串时,输出项是字符数组名,不能写成数组中的元素。
    输入函数的输入项直接写数组名,不写地址符&。
    输入函数遇到空格认为结束。
    两个字符数组变量不能直接赋值,只能通过移动下标操作字符数组中的每个元素进行分别赋值;两个字符值指针,可以直接赋值,即把一个字符指针所指向的地址赋值给另一个指针,
    则两个指针指向的同一个地址。字符数组和字符串两者之间不能直接赋值。
    严格的说两个表达的意思是不完全一样的,因为前者是个字符串指针,这个指针S1所存的地址就是存储字符串前8个字节即hello/n/n/n的那个地址。
    而后者是字符数组。每个字符都有一个独立的地址。
    字符串变量:在c中是没有这个概念的,c中如果想将一个字符串存放到变量中,必须使用字符数组,就是用一个字符型数组存放一个字符串,一些自己的保护代码,通过软件手段将这段内存软保护起来。这种保护在汇编级别可以轻松突破,其保护也就无效了。
    见图示。




    展开全文
  • static局部变量普通局部变量区别?static函数普通函数区别 原创Isanti2015 最后发布于2017-08-21 20:05:50 阅读数 1288 收藏 展开 几者的区别从三个方面考虑: 1初始化时间 2 作用域 3 分配内存空间 static...

    static全局变量和普通全局变量区别?static局部变量和普通局部变量区别?static函数和普通函数区别

    原创Isanti2015 最后发布于2017-08-21 20:05:50 阅读数 1288  收藏
    展开
    几者的区别从三个方面考虑: 
    1初始化时间 
    2 作用域 
    3 分配内存空间

    static全局变量和普通全局变量区别:

    区别:

      1.static全局变量编译是初始化,在main()函数之前初始化并且仅初始化一次; 
      2.static全局变量限定了作用范围,仅在定义该变量的源文件中有效,由于静态全局变量的作用域局限于一个源文件内,即文件作用域,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。全局变量可以跨越多个源文件有效,当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量

    相同点:都是全局作用域,静态存储方式

    static局部变量和普通局部变量区别:

    区别

      1.static局部变量只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。普通局部变量,只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。 
      2.静态局部变量在静态存储区分配空间,局部变量在栈里分配空间。

    相同点:两者都只有局部作用域

    static函数和普通函数区别:

    区别

      1.普通函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。好处:其他文件中可以定义相同名字的函数,不会发生冲突。 
      2.普通函数在C++类中编译后带一个隐藏的this参数,而static函数不带。

    相同的

    全局变量、静态全局变量以及静态局部变量都会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它们与堆变量、堆变量的区别。 
    而局部变量在栈里分配空间 
    从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。

    点赞 4
    ————————————————
    版权声明:本文为CSDN博主「Isanti2015」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wangbeibei23/article/details/77455807

    展开全文
  • 主要介绍了Python全局变量与局部变量区别及用法,结合实例形式分析了Python全局变量与局部变量的定义、常见用法、区别及相关操作注意事项,需要的朋友可以参考下
  • 全局变量局部变量静态全局变量、静态局部变量区别转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html 标签:全局变量 局部变量 静态全局变量 静态局部变量 it ...
    全局变量局部变量静态全局变量、静态局部变量的区别

    转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html

    C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

    从作用域看:

    全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。

    静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

    局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

    静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

    从分配内存空间看:
    全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间





    全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程 序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在 同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

    1)、静态变量会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
      2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

    从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。

    Tips:
      A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
      B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
      C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
    D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
    E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
    展开全文
  • 全局变量局部变量静态全局变量、静态局部变量区别   转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html 标签:全局变量 局部变量 静态全局变量 静态局部变量 ...
    全局变量局部变量静态全局变量、静态局部变量的区别
     

    转自:http://hi.baidu.com/sindana/blog/item/06fe68171e364401c93d6ded.html

    C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

    从作用域看:

    全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。

    静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

    局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

    静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

    从分配内存空间看:
    全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间





    全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程 序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在 同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

    1)、静态变量会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
      2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

    从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。

    Tips:
      A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
      B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
      C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
    D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
    E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
    展开全文
  • 全局变量和局部变量区别

    千次阅读 多人点赞 2021-06-06 19:53:25
    全局变量和局部变量区别如下: 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区 生命期不同:全局变量...
  • python全局变量-局部变量区别及用法

    万次阅读 多人点赞 2017-11-13 11:12:36
    python里面全局变量和局部变量区别就常用情况
  • 变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都...
  • 全局变量、局部变量、静态全局变量、静态局部变量区别
  • java 全局变量和局部变量区别

    千次阅读 2018-08-03 20:49:58
    全局变量和局部变量区别: 1、作用域不同 全局变量=整个类中可用 局部变量=该方法内可用 2、初始值不同 全局变量=有初始值 局部变量=无初始值 3、声明上不同 全局变量=在一个类中不允许声明同名变量 局部变量=...
  • Python局部变量和全局变量区别

    千次阅读 2018-05-29 15:31:52
    局部变量: 在函数内、在class的方法内(未加self修饰),这就是局部变量 2. 如何使用: 在def中,我们可以定义一个局部变量,该变量仅仅在函数体中有生存期,出了这个函数体,变量就不能使用了。 def fun(): ...
  • 变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域分,全局变量、静态全局变量静态局部变量都存放在内存的静态 存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个...
  • python的局部变量和全局变量区别

    千次阅读 2018-01-16 15:37:59
    全局变量:所有函数之外定义的变量 局部变量:函数内部定义的变量 或者代码块里的变量 ...如果这个变量名字全部变量名字相同,那么局部变量名字会覆盖全局变量名字。 #[demo1] num = 100 def fu
  • 本文主要介绍了C++中的局部变量全局变量、局部静态变量、全局静态变量的区别。具有很好的参考价值,下面跟着小编一起来看下吧
  • 二、变量作用域分为:局部变量和全局变量。1、局部变量://就是定义在函数内部的变量(内部变量),局部变量起作用的范围是函数内部。//局部变量就是私有的变量2、全局变量://就是定义在函数外部的变量(外部变量)...
  • 按存储区域分:全局变量、静态全局变量静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分: 1、全局变量在整个工程文件内都有效; 2、静态全局变量只在定义它的文件内有效; 3、...
  • static变量与全局局部变量区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的...
  • C语言 全局变量和局部变量区别

    千次阅读 多人点赞 2019-01-18 14:08:32
    局部变量和全局变量的区别 背景:上午看书阅及这两对概念,有很多相似之处,故记之。 一. 局部变量&amp;全局变量 1 局部变量:“在函数内定义的变量”, 即在一个函数内部定义的变量,只在本函数范围内有效。 2 ...
  • 局部变量和全局变量的区别

    千次阅读 2017-03-05 18:17:45
    1、全局变量 全局变量也成为外部变量,它是在函数外部...在C等面向过程语言中,局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。 #
  • java全局变量和局部变量区别

    千次阅读 2020-06-28 21:39:21
    java全局变量和局部变量 全局变量 全局变量又称实例变量,属性,成员变量。 位置 定义在类中,属于类中的一个成员 作用范围 因为全局变量是定义在类中的,所以可以使用四种访问权限控制修饰符修饰,但是不论使用哪种...
  • 本文主要是向大家详细的对比分析了javascript中局部变量和全局变量的区别,是篇非常不错的文章,值得仔细去品读,推荐给小伙伴们。
  • 全局变量和局部变量

    千次阅读 2017-01-01 21:37:03
    1、局部变量和全局变量变量按照作用域分为:全局变量和局部变量 全局变量的作用域:从定义位置开始到下面整个程序结束。 局部变量的作用域:在一个函数内部定义的变量只能在本函数内部进行使用。 OK,上面的...
  • static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是...

空空如也

空空如也

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

全局和局部变量的区别