zoukankan      html  css  js  c++  java
  • c中static变量局部变量

    来看看《c专家编程》中一段程序(略有变化):

    #include <stdio.h>
    void init(char *str)
    {
        
    static char s=' ';
        printf(
    "%c %s\n",s,str);
         s
    =',';
    }

    int main()
    {
        init(
    "hhh");
        init(
    "hhh");
        init(
    "hhh");
        
    return 0;
    }

     输出如下:

     

     c中的局部static变量只初始化一次。为了理解,来看看汇编代码:

    .data
        .type    s.
    0,@object
        .size    s.
    0,1
    s.
    0:
        .byte    
    32           #在这里初始化
        .section    .rodata
    .
    LC0:
        .string    
    "%c %s\n"
        .text
    .globl init
        .type    init,@function
    init:
        pushl    %ebp
        movl    %esp, %ebp
        subl    $
    8, %esp
        subl    $
    4, %esp
        pushl    
    8(%ebp)
        movsbl    s.
    0,%eax  #s->eax
        pushl    %eax
        pushl    $.LC0
        
    call    printf
        addl    $
    16, %esp
        movb    $
    44, s.0
        
    leave
        
    ret

     我们看到,在init内部并不存在为s初始化的语句,s位于数据区,且在init外部初始化。

  • 相关阅读:
    howtoautomateyouriphoneappbuildswithhudson
    buildingiphoneappswithhudsonpart2
    Linux常用命令全集
    介绍
    Linux文件查找命令find,xargs详述
    Tomcat for Mac OS
    Jenkins在Mac平台安裝
    Linux下的shell与make
    buildingiosappsforovertheairadhocdistribution
    linux下u盘的使用
  • 原文地址:https://www.cnblogs.com/hustcat/p/1513755.html
Copyright © 2011-2022 走看看