c语言中static使用方法

一、c程序存储空间布局

C程序一直由下列部分组成:

1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;

2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。

3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。

4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。

5)堆——动态存储分。

|-----------|
| |
|-----------|
| 栈 |
|-----------|
| | |
| |/ |
| |
| |
| /| |
| | |
|-----------|
| 堆 |
|-----------|
| 未初始化 |
|-----------|
| 初始化 |
|-----------|
| 正文段 |
|-----------|

时间: 2024-10-30 16:49:55

c语言中static使用方法的相关文章

c语言中static用法总结

一.c程序存储空间布局   C程序一直由下列部分组成: 正文段--CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: 初始化数据段(数据段)--在程序中所有赋了初值的全局变量,存放在这里. 非初始化数据段(bss段)--在程序中没有初始化的全局变量:内核将此段初始化为0. 栈--增长方向:自顶向下增长:自动变量以及每次函数调用时所需要保存的信息(返回地址:环境信息). 堆--动态存储分. |-----------||           ||-------

C语言中static的作用及C语言中使用静态函数有何好处_C 语言

想了解Java中static关键字的作用和用法详细介绍,请点击此处了解详情. 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条,分别是: 一是隐藏功能,对于static修饰的函数和全局变量而言 二是保持持久性功能,对于static修饰的局部变量而言. 三是因为存放在静态区,全局和局部的static修饰的变量,都默认初始化为0 下面我逐一给大家介绍: (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有

C语言中Static和Const关键字的的作用

程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中. 1.作用于变量: 用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态 存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期).用static声明局部变量时,则改变变量的存储方式(生 命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元.这样,使

c语言中static的用法详细示例分析_C 语言

static在c里面可以用来修饰变量,也可以用来修饰函数.先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. 复制代码 代码如下: int a ;int main(){    int b ;     int c* = (int *)malloc(sizeof(int));} a是全局变量,b是栈变量,c是堆变量.static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量.有的程序是由好多.c文件构成.彼此可以互相引用变量,

c语言中static和extern的用法详细解析_C 语言

一,static和extern:大工程下我们会碰到很多源文档. 文档a.c 复制代码 代码如下: static int i; //只在a文档中用int j;    //在工程里用static void init()         //只在a文档中用{}void callme()          //在工程中用{   static int sum;} 上面的全局i变量和init()函数只能用在a.c文档中,全局变量sum的作用域只在callme里.变量j和函数callme()的全局限扩充到整个

c语言-关于C语言中的static变量的问题

问题描述 关于C语言中的static变量的问题 下面的代码最终结果为什么是-10?去掉这个函数中的static则结果是-2可以理解,请教一下加了static后这个变量在函数的多次调用中是如何变化的 int fun() { static int a = 1; return ++a; } int main() { int b; b = fun()-fun()*fun(); printf("%d ",b); return 0; } 解决方案 这属于编译器未定义行为.也就是说,fun()-fu

java语言中new A( ).B( )意思是不是A类的一个对象调用B方法

问题描述 java语言中new A( ).B( )意思是不是A类的一个对象调用B方法 java语言中new A( ).B( )意思是不是A类的一个对象调用B方法如果是new A( ).B( ).......N( )呢这样符合java语法规范吗 解决方案 调用A对象的B方法,因为如果A类中的B方法不是静态方法,那么外面想要调用的话就必须要先将A实例化,也就是是 new A(),之后调用它的B方法,也就是new A( ).B( ).这个是对象匿名的用法,是符合规范的.使用这种方法的话,就不需要将B方

visual basic-改进Visual Basic语言中的Round实现自定义的方法

问题描述 改进Visual Basic语言中的Round实现自定义的方法 VB6.0 语言实现一舍二入请问怎么实现呢?Round可以自定义么 解决方案 自己写一个,比如保留2位: x = 1.2345 x = Int(x * 100 + 8) / 100

java-Java语言中的get set方法有什么用

问题描述 Java语言中的get set方法有什么用 Java语言中的get set方法有什么用,直接调用字段不是更简单么?有人说验证输入,但是也没有验证的代码写出来啊? 解决方案 便于加入验证逻辑.也许你说,现在没有验证逻辑.但是如果直接访问字段,以后再加上验证逻辑,那么调用代码就要修改了,不是麻烦么 解决方案二: 一个类要把自己的属性封装起来,不能让其他类直接访问.通过get和set方法的设置可以控制访问权限.不过一般的类都是get和set同时开放,在这种情况下和直接访问属性是一样效果.再如