您的位置:首页 > 编程语言 > C语言/C++

数据类型和作用域

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


进制

没开头   十进制      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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息