一、数据类型

(一)、变量与常量

1、变量

(1)、定义:其值在其作用域内可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一一定的存储空间。变量在使用前必须要定义,每个变量都有自己的地址。变量依据其定义的类

型,分为不同类型,如整型变量、字符型变量、浮点型变量、指针型变量等。变量的值可以发生改变,意味着它可以被覆盖、被写入、被赋值。每个变量必须要有一个名字和它所在内存空间绑定。

(2)、变量名和变量值

①、变量名是在变量的声明的时候,该名字就和内存中一块地址绑定在一一起了。可以通过变量名直接找到对应的内存区域,也可以通过地址找到其内存区域。

②、变量的值是变量所对应的内存区域内存放的二进制序列,变量的值不会因为变量的类型发生了改变而改变,当变量被转换为对应类型时,内存区域的二进制序列以该类型的形式翻译出来。这也是强制类型转换能够成立的原因。

(3)、局部变量和全局变量

函数形参变量只有在被调用期间才能分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称为变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。

①局部变量

a、定义:局部变量也称为内部变量,局部变量是在函数内作定义说明的,其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。

b、关于局部变量的作用域还要说明以下几点。

(a)、主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。同时,主函数中也不能使用其他函数中定义的变量。因为主函数也是-一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。(b)、形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。(c)、允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。例如,在前例中,形参和实参的变量名都为n,是完全允许的。(d)、在复合语句中也可定义变量,其作用域只在复合语句范围内。

②全局变量

全局变量也称为外部变量,它是在函数外部定义的变量,它不属于哪一个函数,它属于一个源程序文件,其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用。全局变量的一说明符为 extern,但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

2、常量

(1)、定义:其值不会发生改变的量称为常量,它们可以和数据类型接合起来分类,如整型常量、浮点型常量,字符常量等。常量是可以不经过定义和初始化,而直接引用的,常量又分为直接常量和符号常量,直接常量又叫作字面常量,如12,0,446,‘a’,"abed”;符号常量,如宏定义的“ #define PI 3.14“常量的值在其作用域内不会发生改变,也不能再被赋值,在其出现时就被当作一个立即数来使用。也就是说,它只能被访问、被读,而不能被写、被赋值。

(二)、基本内置类型

1、基本内置类型有哪些?

(1)整型

整型共有6种:①、带符号整型(int)、②带符号短整型( short int)、③带符号长整型(long int或long)

④无符号长整型( unsigned long)、⑤无符号整型( unsigned int)、⑥无符号短整型( unsigned short int)

(2).实型

实型数据有表示范围和精度两个不同的特征,为了适应数的范围和精度的不同要求,实型数据分三种类型:单精度型(float,也称为浮点型)、双精度型( double)、长双精度型(long double)

(3).构造类型

构造类型是指由若干个相关的数据组合在一起形成的一种复杂数据类型,构造数据类型的成分数据可以是基本数据类型的,也可以是别的构造类型的。按构造方式和构造要求区分,构造类型主要有数组类型、结构类型和共用类型。数组类型是由相同类型的数据组成;结构类型可以由不同类型的数据组成;当不同数据类型不会同时使用时,以节约内存,让不同数据占用同一区域,这就是共用类型。

(4).指针类型

指针类型是取程序对象(如变量)在内存中占据的地址为值的一种特殊的数据类型。

(5).枚举类型

枚举类型来表示。如变量表示一个星期中的某一天,就可用校举类型描述该变量的类型,并以星期几的英文名对日期命名,对应的变量取某日的星期名称为其值。

(6),void类型

用保留字void表示的数据类型有两种完全相反的意思,可以表示没有数据(没有结果没有形式参数),也可以表示某种任意类型的数据(如又与指针结合,用void标起)。void表示空类型,void表示任意类型的指针类型,若使用void类型的数据,应该将它强制的转换成某种具体的指针类型。

(三)、声明与定义

1、什么是定义?

所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。但注意,这个名字旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊),它们就同内(如函数内、全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个 生共死,终生不离不弃,并且这块内存的位置也不能被改变。一个变量或对象在一定的区域变量或对象。

2、什么是声明?

有两重含义:

第一重含义:告诉编译器,这个名字已经匹配到一块内存上了,上面第2行代码用到变

量或对象是在别的地方定义的。声明可以出现多次。

第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名或对象名。例如,你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预订,别人再也不允许使用这个座位。其实这个时候你本人并没有坐在这个座位上。这种声明最典型的例子就是函数参数的声明,如“ void fun(int i, char c);”

(四)、static与extern

1、static修饰变量,就是指该变量空间独立于函数中的auto变量或者栈变量,static变量空间在内存中的静态区内分配

2、extern是指当前变量或函数不是在本源文件内声明的,它是外部变量或外部函数,正所谓“外来的和尚会念经”,能很好地体现 extern的价值。当我们在本文件里试图引用一个外部声明的全局变量或函数时,可以在其前面加上 extern,表示它是外来“和尚”

extern可以修饰变量和函数,表示该变量或者函数在其他地方被定义

(五)、const

变量前用const修饰,以为该变量里的数据只可以访问,不能被修改

(六)、auto

意味着当前变量的作用域为当前代码的局部变量,即当前代码会在內栈上进行分配

(七)、register

1、作用

如果一个变量被 register来修辞,就意味着该变量会作为一个寄存器变量,让该变量的访问速度达到最快。例如,一个程序逻辑中有一个很大的循环,循环中有几个变量要频繁进行操作,这些变量可以声明为 register类型。

2.寄存器变量:指一个变量直接引用寄存器,也就航是对变量名的操作的结果是直接对寄存器进行访问。

(1)、注意:①待声明为寄存器变量类型应该是CP寄存器所能接收的类型,意味着寄存器变量是单个变量,变量长度应该小于等于寄存器长度。

②不能对寄存器变量使用取地址符“&”,因为该变量没有内存地址。

③尽量在大量频繁操作时使用寄存器变量,且声明的变量个数应该尽量少

(八)、volatile

它修饰的变量表示该变量的值很容易由于外部因素发生改变,强烈请求编译器要老老实实地在每次对变量进行访问时去内存里读取

(九)、typedef:在编程中使用 typedef目的一般有两个:一个是给变量一个易记且意义明确的新名字,另个是简化一些比较复杂的类型声明

1、typdef与#define的问题:

(1)、在有指针的场合里typdef比#define要好

(2)、①#define宏定义有一个特别的长处:可以使用#idef、#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。

②typedef也有一个特别的长处:它符合范围规则,使用 typedef定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性

2、 typedef与复杂的变量声明

遇到比较复杂的变量声明,使用 typedef作简化自有其价值。

(十)、枚举

1、枚举与# define宏的区别

(1)# define宏常量是在预编译阶段进行简单替换 ,枚举常量则是在编译的时候确定其值。

(2)一般在编译器里,可以调试枚举常量,但是 不能调试宏常量

(3)枚举可以一次定义大量相关的常量,而defi ne宏一次只能定义一个。留两个问题:

(1)枚举能做到事,# define宏能不能都做到? 如果能,那为什么还需要枚举?(2) sizeof( Colorva)的值为多少?为什么?

(十一)、联合体:联合与结构有一些相似之处,但两者有本质上的不同。在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和;而在联合中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度(同样遵循对齐)。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。

1、联合体的定义

union 联合名

{

成员表

};

二、运算符、表达式

(一)C语言的运算符可分为以下几类。

1、算术运算符:用于各类数值运算,包括加(+)、减(-)、乘()、除(/)、求余(或称模运算,%)、自增(++)、自减(–),共七种。

2、关系运算:关系运算符:用于比较运算,包括大于(>)、小于(=)、小于等于(<=)和不等于(!=),共六种。

3、逻辑运算符:用于逻辑运算,包括与(&&)、或(|I)、非(!),共三种

4、位操作运算符:参与运算的量,按二进制位进行运算,包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<>),共六种。

5、赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=、-=、=、/=、%=、)和复合位运算赋值(&=、|=、^=、>>=、<<=),三类共十一种。

6、条件运算符:这是一个三目运算符,用于条件求值(??。

7、逗号运算符:用于把若干表达式组合成一个表达式(,)。

8、指针运算符:用于取内容()和取地址(&)两种运算。

9、求字节数运算符:用于计算数据类型所占的字节数( sizeof)。

10、特殊运算符:有括号()、下标[]、成员(->、.)等几种。

c语言中什么运算符可以求出数据字节数,C语言的数据类型及其运算符相关推荐

  1. 关于C语言中的结构体所占的字节数 sizeof(struct)

    C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...

  2. c语言中短整形字节,C语言中各种整型类型所占字节数

    平台:64位编译器+LINUX+Gcc #include main() { char a; char* b; short int c; int d; unsigned int e; float f; ...

  3. 写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算

    写一个计算器(C语言版本),可以求出:整数的加,减,乘,除四则运算! 对于求出整数的加减乘除问题,我想大家现如今看见笔者此篇博文时候!大多都已经能够正确写出准确的代码来求整数的加减乘除了!其实对于计算 ...

  4. C语言使用1到9求出所有k个数字的所有组合的算法(附完整源码)

    C语言使用1到9求出所有k个数字的所有组合的算法 C语言使用1到9求出所有k个数字的所有组合的算法完整源码(定义,实现,main函数测试) C语言使用1到9求出所有k个数字的所有组合的算法完整源码(定 ...

  5. c语言中除法除以1000与1e3,北京航空航天大学C语言b第二讲(第三、四章)数据类型、运算符与表达式和最简单的C程序设计.ppt...

    <北京航空航天大学C语言b第二讲(第三.四章)数据类型.运算符与表达式和最简单的C程序设计.ppt>由会员分享,可在线阅读,更多相关<北京航空航天大学C语言b第二讲(第三.四章)数据 ...

  6. 每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数

    已知一个数组table,用一个宏定义,求出数据的元素个数. // 总大小除以第一个元素的大小 #define TNTBL (sizeof(table)/sizeof(table[0]))

  7. Druid monitor中SQL监控显示不出数据(已解决)

    Druid monitor中SQL监控显示不出数据(已解决) 检查方法一: 查看Druid monitor中的数据源是否可访问 如下图则数据源可访问: 这时检查application.yaml中的配置 ...

  8. C语言试题四十三之求出ss所指字符串中指定字符的个数,并返回此值。

    1. 题目 请编写一个函数function,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目. ...

  9. C语言:向一个文件中写10个数求出其平均值并存入另一个文件中

    题目概述: 在文件file0.dat中写10个数求平均值并存入另一个文件file1.dat中 编程: #include<stdio.h> #include<stdlib.h> ...

最新文章

  1. XML错误:缺少所需的空白区
  2. Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I
  3. 网易数据中台建设实践
  4. “美登杯”上海市高校大学生程序设计赛B. 小花梨的三角形(模拟,实现)
  5. String类的使用 Part2
  6. 第五十期:详解语音识别技术的发展
  7. jmeter参数值只读取了第一个_基础入门篇Jmeter(五)_函数
  8. vue项目html,Vue项目接口.html
  9. 大数据及hadooop简介
  10. BOOTSTRAP学习之路(1)
  11. java Google图片验证码_使用google.kaptcha来生成图片验证码的实现方法
  12. 找到的比较全的tcp/ip的协议号
  13. 实现微信支付宝收款到账语音提醒
  14. 【STM32H7的DSP教程】第22章 DSP矩阵运算-放缩,乘法和转置矩阵
  15. 用python画简单的猴子画法_10种可爱的小猴子简笔画合集,分分钟被萌翻,一看就会画...
  16. LINUX修改主机名称(立即永久生效)
  17. java实现学生信息管理系统
  18. python之字符串及操作相关知识
  19. 纽约州立大学水牛城分校计算机科学专业,美国布法罗大学(纽约州立大学水牛城分校)介绍/专业/申请条件/奖学金 | Hotcourses中国...
  20. Android工程师面试准备知识点

热门文章

  1. 将windows server2019打造成个人操作系统
  2. Unity 判断目标分辨率是16比9还是16比10
  3. 手机怎么把PDF转PPT?几个步骤轻松转换
  4. localtime使用
  5. android 调用搜狗地图api,搜狗地图API开发手册.doc
  6. w10如何共享计算机硬盘,win10局域网怎么共享磁盘?win10系统在局域网共享磁盘的操作步骤...
  7. float:left的应用
  8. 招商银行一面记录——Java岗
  9. 【学习笔记】薛定谔的喵咪Cat—球盒问题(全详解)
  10. UE4 界面设置为中文