pointer on C_2 基本数据类型 指针 const

来源:互联网 发布:windows监控文件变化 编辑:程序博客网 时间:2024/06/05 20:58

第二章:数据

C语言仅有4种基本数据类型:整形,浮点型,指针和聚合类型。

2.1基本数据类型(dev-c++中实验)

2.1.1整形家族

char分为signed和unsigned类型,缺省是signed,范围-128~127,0~255,1个字节

short (int)分为signed和unsigned类型,缺省是signed,范围-32768~32767,0~65536,2个字节

int分为signed和unsigned类型,缺省是signed,范围:-2147483648~ 2147483647,在dev-c++中unsigned同上,4个字节

long (int)分为signed和unsigned类型,缺省是signed,范围-2147483648~ 2147483647,在dev-c++中unsigned同上,4个字节

 

提示:当注重程序可移植性问题时,字符是否为有符号数就很重要。最佳妥协方案是:把存储char型变量的值限制在signed和unsigned之间,并且只有当char变量显示声明为signed和unsigned时,才对它执行算术运算。

 

在limits.h文件中

//char最大最小值

                   printf("%d %d%d\n",SCHAR_MIN,SCHAR_MAX,UCHAR_MAX);

//short最大最小值

                   printf("%d %d%d\n",SHRT_MIN,SHRT_MAX,USHRT_MAX);

//int最大最小值

                   printf("%d %d%d\n",INT_MIN,INT_MAX,UINT_MAX);

//long最大最小值

                   printf("%d %d%d\n",LONG_MIN,LONG_MAX,ULONG_MAX);

 

整形字面值(常量)

在整数字面值后面添加

L或者l->long

U或者u->unsigned

UL或者ul->unsignedlong

 

十进制整形值:123、65535、-275*275,它们可能是int,long,unsigned long型,缺省情况是最短且能容纳它们的类型。

 

八进制整形值:011 以0开头,8和9非法

十六进制整形值:0x11 以0x开头,0~9,A(a)~F(f)

八和十六进制常量可能是int,unsigned int,long或者unsigned long型,缺省情况是最短且能容纳它们的类型。

 

字符常量(int):’M’,’\n’,’??(’,’\337’

特:L’M’叫做宽字符常量

 

提示:根据特定的环境,选择合适类型的整形字面值。

当需要确定一个字中某些特定的位置时,将它写成十六进制或者八进制更为合适,例:983040可表示为F0000

当需要把一个值作为字符使用时,把这个值表示为字符常量,可以使这个值得意思更为清晰,例如48==’0’

 

 

枚举类型(值为符号常量,非字面值的类型)

例:

enum Jar_Type { CUP, PINT, QUART,HALF_GALLON, GALLON};//定义类型 0 1 2 3 4 5

 

enum Jar_Type milk_jug,gas_can,medicine_bottle;//定义变量

 

例:

enum Jar_Type { CUP, PINT, QUART,HALF_GALLON, GALLON}

         milk_jug,gas_can,medicine_bottle;//定义类型0 1 2 3 4 5

 

2.1.2浮点类型

float:4个字节

double:8个字节

long double:16个字节,double不能省略,否者编译器会认为是lont int类型

 

在float.h文件中

//float、double、long double类型最大值

printf("%g %g%g\n",FLT_MAX,DBL_MAX,LDBL_MAX);

//float、double、long double类型最小值

printf("%g %g %g\n",FLT_MIN,DBL_MIN,LDBL_MIN);

//float、double、long double类型所占的字节数

printf("%d %d%d\n",sizeof(float),sizeof(double),sizeof(long double));

 

2.1.3指针

指针的重要性:

表示一些复杂的数据结构,快速的传递数据,减少了内存的耗用,使函数返回一个以上的值,能直接访问硬件,能够方便的处理字符串,是理解面向对象语言中引用的基础

总结:指针是C语言的灵魂

 

指针常量:可以通过取地址操作符获得一个变量的地址而不是直接把它的地址写成字面值常量。实际上,C语言并没有特地定义这个概念。NULL除外!

 

字符串常量:一串以NULL字符结尾的零个或多个字符。

字符串通常存储在字符数组中,这也是C语言没有显示的字符串类型的原因

例:“Hello”、”\aWarning”、”Line1\nline2”、””

 

注意:

    K&R C中没有规定是否可以修改字符串常量;ANSI C中规定不允许编辑字符串常量或者提供编译时的选项,自行选择是否允许修改。

    程序使用字符串常量会生成一个“指向字符的常量指针”

char *p=”Hello World!”;

 

2.2基本声明

那么问题来了,C语言中表达式和语句的区别?

表达式:一种有值的语法结构,它由运算符将变量、常量、函数调用返回值结合而成

语句:是构成程序的元素,以;号结尾。

 

说明符(一个或多个) 声明表达式列表

short=signedshort=short int=signed short int

unsignedshort=unsigned short int

int=signed int=signed

long=signedlong=long int=signed long int

 

 

unsignedshort=unsigned short int

unsignedint=unsigned

unsignedlong=unsigned long int

 

2.2.1初始化

2.2.2声明简单数组

Intvalue[20];

 

注意:

对于C数组,第一,下标从0开始;第二,编译器并不检查数组下标的引用是否越界,所以在使用的时候需要注意下标越界的问题。

例:

intx[2]={1,2};

printf("%d%d",x[1],x[10]);

2.2.3声明指针

注意:正确的声明格式是int*p,如果是int* p容易产生误导。

例:char *messge=”Helloworld!”;

2.2.4隐式声明bull shit!

2.3typedef

Typedef允许为各种数据定义新名字

例:typedef char* ptr_to_char;

ptr_to_chara,b;//ab均是指针变量

 

如果用#define来创建新的类型名。

#defined_ptr_to_char char*

d_ptr_to_chara,b;//实际上为char* a,b;a是指针变量而b不是

 

2.4常变量(字面值常量)

const不涉及指针

第一:int const a=1;constint a=2;a的值不能被修改,可以在声明的时候赋值。

第二:在函数中声明为const的形参在函数调用时会得到实参的值。

 

const涉及到指针

int*p1;//普通指针

int *constp2;//指针值常量

intconst *p3;//指针指向值为常量

int const*const p4;//指针值以及指针指向值均为常量

 

提示:在声明变量的时候,如果变量的值不会被修改,就应该设置const关键字,这种做法不仅使自己的意图明显,而且变量被意外修改的时候能够报错!

 

#define是另一种创建名字常量的机制。

#defineMAX_ELEMENTS 50

intconst MAX_ELEMENTS=50;

 

提示:只要使用字面值常量的地方都可以使用#define定义数组的长度或者限制循环的计数能够大大提高程序的可维护性!而const变量只能用于允许使用变量的地方。

 

0 0