类型、运算符与表达式

来源:互联网 发布:centos phomyadmin 编辑:程序博客网 时间:2024/06/08 16:11

首先介绍下一些概念:

  • 变量和常量时程序处理的两种基本数据对象。

  • 声明语句需要说明变量的名字及类型,也可以指定变量的初值。

  • 运算符是指定将要进行的操作。

  • 表达式则是把变量与常量组合起来生成新的值。

  • 对象的类型决定该对象的取值的集合以及可以对该对象执行的操作。



变量 

程序执行中,需要临时保存数据的容器,称之位变量。

声明一个变量的结构是:

变量类型 变量名;(或者)变量类型 变量名 = 初始值;

变量名:变量名是有数字与字符组成的,第一个字符必须位字面,下划线'_'是被看着是字面的。

变量的类型:即数据类型。


数据类型有哪些呢?

在C语言里,数据类型分位 基本数据类型 和 引用数据类型。

基本数据类型:char类型,int类型,float类型,double类型。

引用数据类型:指针类型,结构体类型,枚举类型......

变量是占内存空间的。

• char: 有符号 8 位整数。
• short: 有符号 16 位整数。
• int: 有符号 32 位整数。
• long: 在 32 位系统是 32 整数 (long int),在 64 位系统则是 64 位整数。
• long long: 有符号 64 位整数 (long long int)。
• bool: _Bool 类型,8 位整数,在 stdbool.h 中定义了 bool / true / false 宏便于使⽤。 

例子:

  1. char _c;

  2. int i;

  3. long l = 1l;

  4. float f = 1.0f;

  5. double d = 1.0;


字面值

字面值是源代码中用来描述固定指的记号,可能是整数、浮点数、字符或者字符串。

1>整数常量

除里常见的十进制整数外,还可以用八进制(0开头)或十六进制(0x/0X)表示。

  1. int x = 010;
  2. int y = 0x0A;
  3. printf("x = %d, y = %d\n", x, y);

2>浮点常量

一般包含小数的声明为float或者double。

默认浮点常量是double,可以F后缀表示float,用L后缀表示long double类型。


3>字符常量

字符常量默认是int类型。


4>字符串常量

C语言中的字符串是一个以NULL(也就是\0)结尾的char数组

空字符串在内存中占用一个字节,包含一个NULL字符,也就是说要表示一个长度为1的字符串最少需要2个字节来存储(strlen和sizeof表示的含义不同)。

  1. char s[] = "Hello, World!";
  2. char * s2 = "Hello, C!";

类型转换

当运算符的几个操作数类型不同时,就需要进行类型转换。通常编译器会做某些自动的隐式转换操作,在不丢失信息的前提下,将位宽“窄”的操作数转换位“宽”类型。

隐式类型转换

编译器默认的隐式转换的数据类型:

  1. long double > double > float > long long > long > int > char > _Bool

强制类型转换

强制类型转换存在风险。可能会导致数据的问题。

  1. int num = 1;
  2. long newNum = (long)num;


运算符


运算符就像我们用的加、减、乘、除。让数字或者变量进行运算。

在C语言里面,运算符也是有区分的,有一元运算符、二元运算符以及三元运算符。

下面介绍下特殊的运算符


1>复合字面值

C99新增的内容,可以直接用该语法声明一个结构或者数组指针。

  1. (类型名称)(初始化列表)

例如:

  1. // 整型变量,指针
  2. int * i = &(int){123};
  3. // 数组,指针
  4. int * x = (int[]){1,2,3,4};
  5. // 结构,指针
  6. struct data_t * data = &(struct data_t){.x = 123};
  7. // 函数参数,结构参数,结构指针参数
  8. func(123, &(struct data_t){.x = 123});


2>sizeof

返回操作数占用内存空间大小,单位字节(byte)。sizeof返回值是size_t类型,操作数可以是类型和变量。

  1. size_t size;
  2. int x = 1;
  3. size = sizeof(int);
  4. size = sizeof(x);
  5. size = sizeof x;
  6. size = sizeof(&x);
  7. size = sizeof &x;

附:不要用int代替 size_t,因为在32位和64位平台size_t长度不同。


3>逗号运算符

逗号运算符,可以确保操作数从左到右顺序处理,并返回右操作数的值和类型

  1. int i = 1;
  2. long long x = (i++ , (long long )i);
  3. printf("%lld\n",x);



希望持续关注,如有疑问请回复!谢谢!

0 0
原创粉丝点击