广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言由浅入深了解变量的应用
  • 173
分享到

C语言由浅入深了解变量的应用

2024-04-02 19:04:59 173人浏览 泡泡鱼
摘要

目录1. 变量的存储类别内存虚拟内存分区(运行程序时进行分区) 2. 全局变量普通的全局变量静态全局变量3. 局部变量普通局部变量静态局部变量4. const不可赋值变量5

1. 变量的存储类别

内存

  1. 物理内存:实际的存储设备
  2. 虚拟内存:操作系统虚拟出来的内存
  3. 操作系统会在物理内存和虚拟内存之间做映射。
  4. 在32位系统下,每个进程的寻址范围是4G, 0x00 00 00 00 ~ 0xff ff ff ff
  5. 在写应用程序的时候,我们看到的都是虚拟地址
  6. 在32位操作系统中,虚拟内存被分为两个部分,3G的用户空间和1G的内核空间,其中用户空间是当前进程私有的,内核空间是一个系统中所有进程公有的。

虚拟内存分区(运行程序时进行分区) 

  1. 堆:在动态申请内存的时候在堆里开辟内存
  2. 栈:主要存放局部变量
  3. 静态全局区:(1)未初始化的静态全局区:静态变量(定义便来嗯的时候,前面加static修饰),或全局变量,没有初始化的,存在此区。(2)初始化的静态全局区:全局变量,静态变量,赋值的存在此区。
  4. 代码区:存放程序代码
  5. 文字常量区:存放常量

2. 全局变量

普通的全局变量

概念:在函数外部定义的变量

#include<stdio.h>
int a = 10;  // 普通全局变量
int main(){
    printf("a的数值是%d\n",a);
    return 0;
}

作用范围:程序的所有地方,只不过用之前需要声明,例如 extern int a;

生命周期:一直到程序运行结束。

注意:定义普通全局变量时,如果不赋值,默认为0

静态全局变量

概念:定义全局变量的时候,前面加一个static修饰

作用范围:static限定了静态全局变量的作用范围,只能在它定义的.c文件中有效

声明周期:直到程序结束

注意:不赋值默认为0

#include<stdio.h>
static int a = 10;  // 静态全局变量,不能跨文件使用
int main(){
    printf("a的数值是%d\n",a);
    return 0;
}

3. 局部变量

普通局部变量

概念:在函数内部定义的,或者复合语句中定义的变量

作用范围:在函数中定义的变量,在函数中有效。在复合语句中定义的,在复合语句中有效

生命周期:在函数调用之前,局部变量不占用空间,调用的时候才为局部变量开辟空间,函数结束了,局部变量就释放了。复合语句中也是如此。

#include<stdio.h>
void myfunc(){
    int a = 10;   // 局部变量
    printf("a的数值是%d\n",a);
    return;
}
int main(){
    myfunc();
  //  printf("a的数值是%d\n",a); 这条语句是错误的,main不可以调用myfunc中的变量a
    return 0;
}

静态局部变量

概念:定义局部变量的时候,前面加static修饰

作用范围:在它定义的函数或复合语句中有效

生命周期:第一次调用函数的时候,开辟空间赋值,函数结束后,不释放,以后再调用函数的时候,就不再为其开辟空间,也不赋初值,用的是以前哪个变量。

#include<stdio.h>
void myfunc(){
    static int a = 10;   // 静态局部变量
    printf("a的数值是%d\n",a);
    return;
}
int main(){
    myfunc();
    return 0;
}

4. const不可赋值变量

const 关键字用来声明不可赋值的变量

#include<stdio.h>
int main(){
    const int num;
    num = 7;  // 这条语句必报错
    printf("num是%d\n",num);
    return 0;
}

报错如下:

既然不可以赋值,那有什么用呢?可以在初始化的时候进行赋值!

#include<stdio.h>
int main(){
    const int num = 8;
    printf("num是%d\n",num);
    return 0;
}

5. volatile多变的变量

volatile关键字用来声明多变的变量,这种变量的内容随时可能被改变,而且这种改变的原因不是我们的语句造成的

到此这篇关于C语言由浅入深了解变量的应用的文章就介绍到这了,更多相关C语言变量内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言由浅入深了解变量的应用

本文链接: https://www.lsjlt.com/news/148323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言由浅入深了解变量的应用
    目录1. 变量的存储类别内存虚拟内存分区(运行程序时进行分区) 2. 全局变量普通的全局变量静态全局变量3. 局部变量普通局部变量静态局部变量4. const不可赋值变量5...
    99+
    2022-11-13
  • C语言由浅入深理解指针
    目录1. 相关概念2. 指针的定义方法3. 指针的分类4. 指针和变量的关系5. 指针与数组的关系6. 指针的运算1. 相关概念 操作系统给每个存储单元分配了一个编号,从ox00 0...
    99+
    2022-11-13
  • C语言由浅入深讲解线程的定义
    目录线程的概念线程的创建线程的终止线程标识的比较线程的取消线程等待线程分离线程的概念 可以简单理解为一个正在独立运行的函数 注: 1.posix线程是一套标准吗,而不是实现 2.线程...
    99+
    2022-11-13
  • C语言中bool变量的深入理解
    目录前言bool类型变量的大小bool 值与0比较c语言中bool如何输出总结前言 在一些高级语言当中,为了能够完成更好的逻辑判断,因此就有了bool类型,bool类型的变量值只有t...
    99+
    2022-11-12
  • C语言由浅入深讲解文件的操作下篇
    目录文件的顺序读写字符输入输出fgetc和fputcfgetcfputc:文本行输入输出函数fgets和fputsfgets:fputs:格式化输入输出函数fscanf和fprint...
    99+
    2022-11-13
  • C语言由浅入深讲解文件的操作上篇
    目录为什么使用文件什么是文件文件名关于文件的一些概念文件函数fopenfclose实例代码绝对路径文件的打开方式文件操作流程为什么使用文件 前面写的通讯录,增加人数退出程序后,数据就...
    99+
    2022-11-13
  • 深入浅出理解C语言指针的综合应用
    目录指针是什么?指针变量  使用指针变量的例子通过指针引用数组&数组名vs数组名野指针野指针成因1.指针未初始化2.指针越界访问如何避免野指针指针运算指针是什么? ...
    99+
    2022-11-13
  • 深入了解c语言的循环语句
    目录C语言循环语句while循环for循环do......while循环的嵌套总结:C语言循环语句 大多数人都希望自己是体格强健,天资聪慧,多才多艺的人。虽然有时事与愿违,但至少我们...
    99+
    2022-11-12
  • C语言深入浅出讲解指针的使用
    目录一、利用指针倒序字符串二、题目实例三、总结一、利用指针倒序字符串 void _reversal(char* left, char* right) { while (lef...
    99+
    2022-11-13
  • 深入了解C语言栈的创建
    目录栈的结构定义如下:栈的初始化如下:栈元素的输入接口:完整代码如下:运行结果如下:总结栈:是限定仅在表尾进行插入和删除操作的线性表! 栈的结构定义如下: typedef str...
    99+
    2022-11-12
  • 怎么深入了解c语言的循环语句
    怎么深入了解c语言的循环语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C语言循环语句大多数人都希望自己是体格强健,天资聪慧,多才多艺的人。虽然有时事与愿违,但至少我们用...
    99+
    2023-06-22
  • C语言深入浅出讲解顺序表的实现
    目录1.线性表2.顺序表2.1 概念及结构2.2 提供接口2.3 接口实现今天起开始编写数据结构中的各种数据结构及算法的实现,说到顺序表,我们首先得了解下线性表。 1.线性表 线性表...
    99+
    2022-11-13
  • 深入了解C语言中的const和指针
    目录前言指针的赋值问题ANSI C 有关简单赋值的标准问题解决const修饰const修饰变量const修饰指针前言 文章内容由阅读《C专家编程》整理而来。希望可以帮助大家解决在指针...
    99+
    2022-11-13
  • 深入了解C语言的动态内存管理
    目录一、为什么会存在动态内存二、动态内存函数1.malloc和free2.calloc3.realloc三、动态内存函数常见错误2.对NULL指针进行解引用操作3.使用free释放一...
    99+
    2022-11-13
  • C语言的动态内存管理的深入了解
    目录一、动态内存分配二、动态内存分配函数1、malloc()2、realloc()3、calloc()三、用free函数释放内存四、迷途指针总结一、动态内存分配 (1)用malloc...
    99+
    2022-11-13
  • 深入了解一下C语言中的柔性数组
    目录什么是柔性数组柔性数组的使用什么是柔性数组 柔性数组是在C99中定义的 结构体的最后一个元素允许是未知大小的数组,这就叫柔性数组 柔性数组的长度可以写成0,也可以不规定数组长度 ...
    99+
    2023-02-13
    C语言柔性数组使用 C语言柔性数组
  • 深入了解C语言结构化的程序设计
    目录C语言是结构化的程序设计语言!if语句1:单分支结构2:多分支结构悬空elsewhile循环总结C语言是结构化的程序设计语言! 结构有三大类:顺序结构,选择结构,循环结构! 顺序...
    99+
    2022-11-12
  • 深入了解C语言中的动态内存分配
    目录什么是动态内存分配如何进行动态内存分配首先我要介绍两个函数 malloc 和 free第二个开辟空间的动态内存分配的函数 calloc大小修改函数realloc今天我们来学习一下...
    99+
    2022-11-13
  • C语言深入了解自定义数据类型的使用
    目录一、自定义数据类型(上)二、自定义数据类型(中)​​​​​三、自定义数据类型(下)​​​​​一、自定义数据类型(上) 类型命名关键字 (typedef) C语言中可以对类型赋予新...
    99+
    2022-11-13
  • 深入了解Go语言中sync.Pool的使用
    目录1. 简介2. 问题引入2.1 问题描述2.2 解决方案3. 基本使用3.1 使用方式3.2 使用例子    4.使用注意事项4.1 需要...
    99+
    2023-05-15
    Go语言 sync.Pool使用 Go语言 sync.Pool Go sync.Pool
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作