数据类型和作用域

来源:互联网 发布:成都美食 知乎 编辑:程序博客网 时间:2024/04/27 14:15

基本数据类型

4 种基本数据类型:
整型、浮点型、指针:、聚合类型(数组和结构)

signed与unsigned:

数据分signed和unsigned的,默认是signed类型。
例如:
int a; //有符号的
unsigned int a ; //无符号的。

  //各数据类型表示范围:signed char: -127127unsigned char: 0255short int : -3276732767unsigned short int : 065535int : -3276732767unsigned int : 065535long int : -2147483647214783647unsigned long int : 04294967295 

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 double

sizeof(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

进制

没开头   十进制      hex0       八进制      oct0x      十六进制    hex0b      二进制      binprintf("%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");  //输出:\nprintf("\\\'\"\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;}
1 0
原创粉丝点击