赋值运算符: =
数据对象,左值,右值和运算符
赋值表达式语句的目的是把值存储到内存位置上,用于存储值得数据存储区域被称为数据对象(data object), 使用变量名是标识对象的一种方法.左值是C语言术语,用于标识特定数据对象的名称或者表达式.因此,对象指的是实际的数据存储,而左值是用于标识或者定位存储位置的标签
右值指的是能赋值给可修改左值的量,且本身不是左值.
赋值表达式C语言支持连续赋值,比如 a = b = c = 123,赋值的顺序是123赋值给c,然后赋值给b,再赋值给a
sizeof运算符和size_t类型
sizeof 运算符的含义
sizeof
运算符返回以字节为单位的运算对象的大小(在C中,1字节定义为char类型所占用的空间的大小,通常是8位)运算对象可以是具体的数据对象(如,变量名)或者类型.如果运算对象是类型(如,float),则必须使用圆括号括起来.
#include <stdio.h>
int main()
{
int n = 0;
char c = 'a';
size_t intsize;
intsize = sizeof(int);
printf("n = %d, c has %zd bytes, n has %zd bytes; all ints have %zd bytes.\n",
n,sizeof c, sizeof n,intsize);
return 0;
}
结果:
C语言规定,sizeof返回size_t类型.这是一个无符号的整数类型,但是它不是新类型.前面介绍过,size_t是语言定义的标准类型.%zd用来显示printf()显示size_t类型的值.如果系统不支持%zd,可使用%u和%lu代替%zd
递增运算符: ++
1. 运算符说明
- 执行简单的任务,将其运算对象递增1.
- 两种模式,放到变量前面,前缀模式,放到变量后面,后缀模式.
- 前缀模式是先递增,再去参与运算,后缀模式是先去运算,然后再去做递增
#include <stdio.h>
int main()
{
int ultra = 0,super = 0;
while (super < 5)
{
super++;
++ultra;
printf("super = %d,ultra = %d \n",super,ultra);
}
return 0;
}
结果:
这样写递增的逻辑使得C语言的程序很紧凑.
#include <stdio.h>
int main()
{
int a = 1, b = 1;
int aPost, preB;
aPost = a++;
preB = ++b;
printf("a aPost b preB\n");
printf("%ld %5d %5d %5d\n", a, aPost, b, preB);
return 0;
}
结果:
可以看到,++后缀如果放到表达式里面就是先做运算,然后再赋值,++前缀如果放到表达式里面就是先计算++后面的变量的值,然后再进行表达式的运算
2. 递减运算符
递减运算符的规则和递增运算符的规则是相同的,它只是给原变量减一
3. 优先级
递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高.因此,xy++表示的是(x)(y++),而不是(xy)++. 不过(x)(y++)等于(x)*(y)而后y再自增.