C语言数据类型与变量
一、数据类型1.字符型char2.整形short 【int】intlong 【int】long long 【int】3.浮点型floatdoublelong double4.布尔型(使用需要包含头文件stdbool.h)_Bool取值为true或false5.各种数据类型的长度需要用到sizeof操作符sizeof 是⼀个关键字也是操作符专⻔是⽤来计算 sizeof 的操作符数的类型⻓度的单位是字节sizeof 操作符的操作数可以是类型也可是变量或者表达式sizeof( 类型 ) sizeof 表达式1sizeof后面跟的不是类型而是表达式的时候可以省略后面的括号2表达式不参与真实的运算只根据类型得出大小3计算结果的类型为size_t4sizeof中的表达式不计算sizeof 在代码进⾏编译的时候就根据表达式的结果的类型推到并确定了类型的⻓度⽽表达式 真要被执⾏却要在程序运⾏期间才会发⽣如果在编译期间已经将 sizeof 处理掉了所以在运⾏ 期间就不会执⾏表达式了提醒sizeof 运算符的返回值C语⾔只规定是⽆符号整数并没有规定具体的类型⽽是留给 系统⾃⼰去决定 sizeof 到底返回什么类型。不同的系统中返回值的类型有可能是 unsigned int 也有可能是 unsigned long 甚⾄是 unsigned long long 对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。 C语⾔提供了⼀个解决⽅法创造了⼀个类型别名 size_t ⽤来统⼀表⽰ sizeof 的返 回值类型。对应当前系统的 sizeof 的返回值类型可能是 unsigned int 也可能是 unsigned long long 。各数据类型的长度#include stdio.h int main() { printf(%zd\n, sizeof(char));//1 printf(%zd\n, sizeof(_Bool));//1 printf(%zd\n, sizeof(short));//2 printf(%zd\n, sizeof(int));//4 printf(%zd\n, sizeof(long));//4 printf(%zd\n, sizeof(long long));//8 printf(%zd\n, sizeof(float));//4 printf(%zd\n, sizeof(double));//8 printf(%zd\n, sizeof(long double));//在vs上是8个字节在gcc上测试是16 return 0; }二、signed和unsignedC语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。 signed 关键字表⽰⼀个类型带有正负号包含负值 unsigned 关键字表⽰该类型不带有正负号只能表⽰零和正整数。 对于 int 类型默认是带有正负号的也就是说 int 等同于 signed int 。(1)整数变量声明为 unsigned 的好处是同样⻓度的内存能够表⽰的最⼤整数值增⼤了⼀倍。(2)unsigned int中的int可以省略(3)字符类型char也可以设置signed和unsigned但C语⾔规定 char 类型默认是否带有正负号由当前系统决定三、数据类型的取值范围为了代码的可移植性需要知道某种整数类型的极限值时应该尽量使⽤这些常量。• SCHAR_MIN SCHAR_MAX signed char 的最⼩值和最⼤值。• SHRT_MIN SHRT_MAX short 的最⼩值和最⼤值。• INT_MIN INT_MAX int 的最⼩值和最⼤值。• LONG_MIN LONG_MAX long 的最⼩值和最⼤值。• LLONG_MIN LLONG_MAX long long 的最⼩值和最⼤值。• UCHAR_MAX unsigned char 的最⼤值。• USHRT_MAX unsigned short 的最⼤值。• UINT_MAX unsigned int 的最⼤值。• ULONG_MAX unsigned long 的最⼤值。• ULLONG_MAX unsigned long long的最⼤值。四、变量1.变量的创建规则数据类型变量名变量命名的⼀般规则• 只能由字⺟包括⼤写和⼩写、数字和下划线_组成。• 不能以数字开头。• ⻓度不能超过63个字符。• 变量名区分⼤⼩写。• 变量名不能使⽤关键字。变量在创建的时候就给一个初始值叫做初始化2.变量的分类全局变量在⼤括号外部定义的变量就是全局变量 全局变量的使⽤范围更⼴整个⼯程中想使⽤都是有办法使⽤的。局部变量在⼤括号内部定义的变量就是局部变量 局部变量的使⽤范围是⽐较局限只能在⾃⼰所在的局部范围内使⽤的如果局部变量和全局变量名称相同则优先使用局部变量3.变量的存放1. 局部变量是放在内存的栈区2. 全局变量是放在内存的静态区3. 堆区是⽤来动态内存管理的五、算数操作符指的是 - * / % 这些操作符都是双⽬操作符也被叫做运算符1与-对应加减法2*对应乘法3/对应除法但是如果除号的两端都是整数则只执行整数除法得到的结果为整数int a6; int b4; int ca/b;//结果为1 //若想要运算结果为浮点型除号两端至少有一个数为浮点型4%对应求模运算只能用于整数负数的求模规则符号由运算符前面的那个数字来定六、赋值操作符在变量创建的时候给⼀个初始值叫初始化在变量创建好后再给⼀个值这叫赋值int a100;//初始化 b200;//赋值1.连续赋值从右往左依次赋值不建议连续赋值不易于理解2.复合赋值符 - * / % | ^七、单目操作符 -- -(负) 正1.前置/--先1/-1再使用2.后置/--先使用后1/-1八、强制类型转换使用方法类型九、scanf和printf介绍1.printf用法略1占位符%a ⼗六进制浮点数字⺟输出为⼩写。• %A ⼗六进制浮点数字⺟输出为⼤写。• %c 字符。//char• %d ⼗进制整数有符号的10进制整数。//int• %e 使⽤科学计数法的浮点数指数部分的 e 为⼩写。• %E 使⽤科学计数法的浮点数指数部分的 E 为⼤写。• %i 整数基本等同于 %d 。• %f ⼩数包含 float 类型和 double 类型。//float -%f double-%lf• %g 6个有效数字的浮点数。整数部分⼀旦超过6位就会⾃动转为科学计数法指数部分的 e 为⼩写。• %G 等同于 %g 唯⼀的区别是指数部分的 E 为⼤写• %hd ⼗进制 short int 类型。• %ho ⼋进制 short int 类型。• %hx ⼗六进制 short int 类型。• %hu unsigned short int类型。• %ld ⼗进制 long int 类型。• %lo ⼋进制 long int类型。• %lx ⼗六进制 long int类型。• %lu unsigned long int 类型。• %lld ⼗进制 long long int 类型。• %llo ⼋进制 long long int 类型。• %llx ⼗六进制 long long int 类型。• %llu unsigned long long int 类型。• %Le 科学计数法表⽰的long double类型浮点数。• %Lf long double 类型浮点数。• %n 已输出的字符串数量。该占位符本⾝不输出只将值存储在指定变量之中。• %o ⼋进制整数。• %p 指针⽤来打印地址。• %s 字符串。• %u ⽆符号整数unsigned int。• %x ⼗六进制整数。• %zd size_t 类型。• %% 输出⼀个百分号。2输出格式限定宽度printf(%5d,123);%5d表示这个占位符宽度至少为5若不满5个前面自动添加空格输出默认是右对齐printf(-%5d,123);此为左对齐对于小数小数的默认精度为小数点后六位printf(%12f,123.45);上述式子的输出结果前面有两个空格3%可以确保输出的值总是带有正负号4可以限定小数的位数如“%.2f”限定小数只有两位可以与限定宽度的占位符同时使用最⼩宽度和⼩数位数这两个限定值都可以⽤ * 代替通过 printf() 的参数传⼊。如printf(%*.*f\n, 6, 2, 0.5);5输出部分字符串形式%.[m]s 其中[m]表示一个数字2.scanf基础用法略1变量前⾯必须加上 运算符指针变量除外因为 scanf() 传递的不是值⽽是地址 即将变量 i 的地址指向⽤⼾输⼊的值。 如果这⾥的变量是指针变量⽐如字符串变量那就不⽤加 运算符2当scanf处理多个输入时scanf() 处理数值占位符时会⾃动过滤空⽩字符包括空格、制表符、换⾏符等。所以⽤⼾输⼊的数据之间有⼀个或多个空格不影响 scanf() 解读数据。另外⽤⼾使⽤回⻋键将输⼊分成⼏⾏也不影响解读3scanf() 处理⽤⼾输⼊的原理是⽤⼾的输⼊先放⼊缓存等到按下回⻋键后按照占位符对缓存 进⾏解读。 解读⽤⼾输⼊时会从上⼀次解读遗留的第⼀个字符开始直到读完缓存或者遇到第⼀个不符合条 件的字符为⽌// ⽤⼾输⼊ -13.45e12# 0 scanf(%d, x); printf(%d\n, x); scanf(%f, y); printf(%f\n, y);如上述例子第一次读取读取到-13第二次读取.45e12但第二次打印的结果可能与实际结果不一致这是因为小数在储存的时候不精确再乘上e12将误差放大了很多4scanf() 的返回值是⼀个整数表⽰成功读取的变量个数。如果没有读取任何项或者匹配失败则返回 0 。如果在成功读取任何数据之前发⽣了读取错误或者遇到读取到⽂件结尾则返回常量EOF(-1)。EOF-end of file⽂件结束标志5按ctrlz可以提前结束输入6scanf常用的占位符与 printf() 的占位符基本⼀致• %c 字符。• %d 整数。• %f float 类型浮点数。• %lf double 类型浮点数。• %Lf long double 类型浮点数。• %s 字符串。• %[] 在⽅括号中指定⼀组匹配的字符⽐如 %[0-9] 遇到不在集合之中的字符匹配将会停⽌。上⾯所有占位符之中除了 %c 以外都会⾃动忽略起⾸的空⽩字符。 %c 不忽略空⽩字符总是返 回当前第⼀个字符⽆论该字符是否为空格占位符 %s 它其实不能简单地等同于字符串。它的规则是从当前第⼀个⾮空⽩字符开始读起直到遇到空⽩字符即空格、换⾏符、制表符等为⽌。因为 %s 不会包含空⽩字符所以⽆法⽤来读取多个单词除⾮多个 %s ⼀起使⽤。这也意味着scanf() 不适合读取可能包含空格的字符串⽐如书名或歌曲名。另外 scanf() 遇到 %s 占位符会在字符串变量末尾存储⼀个空字符 \0scanf() 将字符串读⼊字符数组时不会检测字符串是否超过了数组⻓度。所以储存字符串时很可能会超过数组的边界导致预想不到的结果。为了防⽌这种情况使⽤ %s 占位符时应该指定读⼊字符串的最⻓ 度即写成 %[m]s 其中的 [m] 是⼀个整数表⽰读取字符串的最⼤⻓度后⾯的字符将被丢弃。3.赋值忽略符只要把 * 加在任何占位符的百分号后⾯该占位符就不会返回值解析后将被丢弃
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2567625.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!