数据类型和作用域
2016-04-12 15:51
239 查看
基本数据类型
4 种基本数据类型:整型、浮点型、指针:、聚合类型(数组和结构)
signed与unsigned:
数据分signed和unsigned的,默认是signed类型。
例如:
int a; //有符号的
unsigned int a ; //无符号的。
//各数据类型表示范围: signed char: -127 到 127 unsigned char: 0 到 255 short int : -32767 到 32767 unsigned short int : 0 到 65535 int : -32767 到 32767 unsigned int : 0 到 65535 long int : -2147483647 到 214783647 unsigned long int : 0 到 4294967295
1.整型
整型包括char、short、int和long类型。sizeof() 返回类型存储所占字节数
sizeof(char)=1
sizeof(int)=4
注意:根据各计算机的不通,char、int等类型存储所占字节数不固定。
溢出:
超过计算机数据类型能表示的范围,分正溢出和负溢出。
例如:
#include < limits.h >中宏:INT_MAX和INT_MIN
INT_MAX:当前系统中整型数据(char,short,int,long)的最大表示范围
INT_MIN:当前系统中整型数据的最小表示范围
long m,n; //m和n都没有溢出 //如何判断m+n溢出,如果直接计算m+n>INT_MAX,则m+n的值可能会溢出。 if(m>INT_MAX-n) //>号两边都不会溢出,则可判断m+n是否溢出 { printf(“溢出\n”); }
2.枚举类型
枚举类型的值为符号常量格式: enum 类型名{类型名的取值范围};
Eg :
enum Color{WHITE,BLACK,RED,GREEN,BLUE}; enum Jar_Type {CUP, PINT, QUART, HALF_GALLON, GALLON}; enum Jar_Type {CUP = 8, PINT = 16, QUART = 32, HALF_GALLON = 64, GALLON = 128};
enum.c
#include<stdio.h> int main() { //枚举类型的定义,类似结构体的定义 enum Color { WHITE=0x001, //0b00001 BLACK=0x002, //0b00010 RED=0x004, //0b00100 GREEN=0x008, //0b01000 BLUE=0x010 //0b10000 }; //WHITE | BLACK=0b00011 //实体化枚举对象 if(color==BLUE) { printf(“this is blue.\n”); } return 0; }
3.浮点类型
浮点类型 包括:float, double, long doublesizeof(float)=4;sizeof(double)=8;
头文件 float.h 定义了 FLT_MIN, FLT_MAX, DBL_MIN, DBL_MAX,LDBL_MIN, LDBL_MAX 分别表示float, double, long double 所能 存储的最小值和最大值
浮点型(表达式) –> 整型转换时出现精度丢失
3.9 –> 3
整型表达式–>浮点型转换时精度丢失
float a=10/8 则a=1.00000
int num=10; //num的三等分的值-->保留3位小数 float res=num/3.0; printf(“res=%.3f\n”,res); res=33.333
总结:先计算表达式的值,往精度高的类型转换,在看=左边的类型,将表达式的值转换为左边的类型
1e10==1*10^10
4.指针
指针即地址int *p; //整型指针:指针指向整型数据 char *p; //字符型指针:指针指向字符型数据
指针常量
Eg : int *p = 0x3300ff21;
字符串常量 :“ ”里面的内容
字符串 = 一串字符
//"HELLO"表现为第一个字符的地址 char *str="HELLO"; printf(“%s\n”,str); printf(“%c\n”,*(str+1)); 结果: HELLO E
进制
没开头 十进制 hex 0 八进制 oct 0x 十六进制 hex 0b 二进制 bin printf("%d",022);
转义字符和特殊字符输出
转义字符:\n:换行
\r:回到行首
\b:后退一个字符
printf(“abc\refg\naa\bcc”); 输出:efg //先打印abc \r回到行首则efg覆盖abc acc //\n换行,打印aa \b后退一个字符则cc覆盖一个a,结果为acc
打印特殊字符:
printf("\\"); //输出:\ printf("%%"); //输出:% printf("\\n"); //输出:\n printf("\\\'\"\n"); //输出:\'"
typedef
将较长的类型名转化为较短的类型。enum Color color; typedef enum Color Color; //将enum Color类型替换为Color类型。 Color color;
较易混淆的类型名:
int* a,b,c; a为int *类型 b,c为int类型
typedef与#define的区别:
#define:纯文本替换 #define intp int * intp a,b,c; a为int *类型 b,c为int类型 typedef:整体替换 typedef int * intp; intp a,b,c; a、b、c均为int *类型
2.作用域
四种作用域:文件作用域、函数作用域、代码块作用域、原型作用域
int a; //文件作用域 int b(int c); //原型作用域 int d(int e) { int f; //函数作用域 int g(int h); ...... { int f, g, i; //代码块作用域 ...... } { int i; ...... } }
例如:
#incude<stdio.h> int a=10; //文件作用域 void fun(int c,int d) { int f=40; //fun()函数作用域 printf(“f in fun():%d\n”,f); //f=40 } int main(void) { printf(“a:%d\n”,a); //a=10 int a=100; //main()函数作用域 int f=20; //main()函数作用域 { int f=30; //代码块作用域 fun(); printf(“f in code block:%d\n”,f); //f=30 int a=20; //代码块作用域 } printf(“f out code block:%d\n”,f); //f=20 printf(“a:%d\n”,a); //a=100,当变量同时处在文件作用域与全局作用域中时,变量会遵循就近原则,选择变量的值。 return 0; }
相关文章推荐
- MySQL中的integer 数据类型
- 如何组织构建多文件 C 语言程序(二)
- MySQL 数据类型
- 如何写好 C main 函数
- PostgreSQL教程(四):数据类型详解
- Lua学习笔记之数据类型
- 实现Lua中数据类型的源码分享
- Lua和C语言的交互详解
- Lua数据类型介绍
- SQL 研究 相似的数据类型
- 详解SQLite中的数据类型
- PowerShell中使用GetType获取变量数据类型
- c# 数据类型占用的字节数介绍
- C#难点逐个击破(6):C#数据类型与.net framework数据类型
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解