一、进程映像
    程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)
    进程:正在系统中运行的程序
    进程映像:进程的内存分布情况
        text(代码段):
            翻译后的二进制指令、常量,权限是只读,如果强制修改会产生段错误
        data(数据段):
            初始化的全局变量、初始化的静态全局变量
        bss(静态数据段):
            未初始化的全局变量,在该段内存中的数据开始前会自动清零
        stack(栈):
            局部变量、块变量,会随着程序的运行不断申请、释放
        heap(堆):
            程序员手动申请和释放的内存,使用麻烦
    变量:
        全局变量:定义在函数外的变量
            存储位置:data(初始化)或者bss(未初始化,赋0)
            生命周期:程序开始到程序结束
            适用范围:程序的任意位置都可以使用
        局部变量:定义在函数内的变量
            存储位置:stack
            生命周期:从函数开始到函数结束
            适用范围:只能在该函数内使用
        块变量:定义在if/for/while等语句块内的变量
            存储位置:stack
            生命周期:从语句块开始到语句块结束
            适用范围:只能在该语句块内使用
        注意:同名的局部变量会屏蔽同名的全局变量,同名的块变量会屏蔽同名的局部变量和全局变量
   
二、类型限定符:
    auto
        用于定义自动申请、自动释放的变量(局部变量),不加就代表加了
        注意1:在C11语法标准中用于自动类型识别
        注意2:不能用它修饰全局变量
    extern
        用于声明外部变量,告诉编译器此变量在其它程序中已经定义,先通过编译,但如果在连接时找不到该变量依然会报错
    static
        改变存储位置
            改变局部变量的存储位置,由stack改为data(初始化)或者bss(未初始化,赋0)
        延长生命周期:
            延长局部变量的生命周期,直到程序结束才释放
        限制作用范围:
            限制全局变量的使用范围,限制只能在本文件内使用
            注意:使用static修饰全局变量,可以防止该变量被别的文件使用,以防止别的文件使用
     const
        "保护"变量的值不被显示地修改
        注意1:如果通过内存进行修改,还是可以改的
        注意2:使用const修饰data段数据,那么该数据会存储到text段中,如果强制修改会产生段错误
    volatile
        C编译器会对普通变量的取值进行"取值优化",只要在使用变量过程中该变量没有显示改变,那么编译器会直接使用上一次的结果,而不会每次去都去内存读取数据
        加上volatile修饰,让编译器不要对该变量进行"取值优化",一般在驱动编程、硬件编程、多线程编程中使用
    register
        内存介质:
            硬盘->内存->高级缓存->寄存器->CPU
        申请把变量的存储介质由内存改为寄存器,但是由于寄存器数量有限,不一定百分之百成功
        注意:寄存器变量不能取地址
    typedef
        类型重新定义
        在定义变量前加上typedef,那么原本的变量名就变成了这种数据类型,可以像数据类型一样定义变量

Linux & 标准C语言学习 <DAY9_2>的更多相关文章

  1. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  2. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  3. UNIX/Linux下C语言的学习路线

    一.工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具. 1.操作系统    在UNIX或 ...

  4. C语言学习008:标准错误

    在上一节中的数据文件中(C语言学习007:重定向标准输入和输出),如果文件中的数据包含非法数据,如何让程序显示一条错误的提示消息呢?就需要用到标准错误 #include <stdio.h> ...

  5. Linux下C语言编程基础学习记录

    VIM的基本使用  LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s ...

  6. 实验四 Linux系统C语言开发环境学习

    项目 内容 这个作业属于哪个课程 Linux系统与应用 这个作业的要求在哪里 作业要求链接 学号-姓名 17041428-朱槐健 作业学习目标 1.Linux系统下C语言开发环境搭建 2.学习Linu ...

  7. 【C语言学习】《C Primer Plus》第1章 概览

    学习总结 1.C语言于1972年由贝尔实验室的Dennis Ritchie在与Ken Thompson一起设计UNIX操作系统的时候开发的.的的设计构想来源于Ken Thompson的B语言.Anyw ...

  8. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  9. 郝斌老师C语言学习笔记(一)

    在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...

  10. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...

随机推荐

  1. unity读取Excel表格保存到Sqlite数据库

    1.读取Excel表格和保存sqlite数据库所用到的dll文件   下载链接:dll文件 最后如下图所示 废话不多说了,直接上代码吧 因为太长就折叠了 using System.Collection ...

  2. Mysql5.5命令行修改密码(免安装)

    1. 命令行运行 mysql -uroot -p  my.ini文件设置跳过密码验证(详情见https://www.cnblogs.com/chaoge666/p/13626037.html) 2.输 ...

  3. windows 和 linux 之间的文件传输操作

    参考:http://www.jb51.net/article/123378.htm 本文介绍,如何实现 windows 主机与 linux 虚拟机之间的文件传输. 一.获取虚拟机 IP 地址 要实现 ...

  4. 网络IO模型_01

    4种情况: 1.输入操作:等待数据到达套接字接收缓冲区: 2.输出操作:等待套接字发送缓冲区有足够的空间容纳将要发送的数据: 3.服务器接收连接请求:等待新的客户端连接请求的到来: 4.客户端发送连接 ...

  5. ImmutablePair和ImmutableTriple的使用

    场景 当我们调用某个方法,需要有超过一个值的返回时,我们通常会怎么做,比如现在需要调用方法返回姓名和年龄两个属性(假如姓名为张三,年龄为12). 方式一:使用Map,将Map中分别放入name为key ...

  6. mysql循环插入分隔符分开的字符串

    CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()BEGIN DECLARE i,help_topic_id INT; SET i=10469; ...

  7. js 原生数据类型判断

    之前一直使用的jquery的数据类型判断,比如:isArray()等,今天看到了一个判断数据类型的简单的原生方法,分享给大家 Object.prototype.toString 方法返回对象的类型字符 ...

  8. mysql查询和更新不能同时出现

    mysql出现You can't specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值 ...

  9. 学习JavaScript第一周

    三种输出方式,console.log.element.write.alert(): 简单数据类型:数值型.字符串型.布尔类型.undefined.null 复杂数据类型:对象 数据类型的转换:字符串转 ...

  10. Java数据类型基础

    Java 数据类型基础 数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量必须先定义后使用 Java数据分为两大类 基本类型(primitive type) 数值类型 整数类型 byte(1 ...