C 知识量:16 - 74 - 317
sizeof运算符用于以字节为单位返回运算对象的大小,运算对象可以是具体的数据对象或类型。如果运算对象是类型(例如:int),则必须使用圆括号括起来,如果是数据对象(例如:变量)则可以省略圆括号。
C语言规定,sizeof返回size_t类型的值。这是一个无符号整数类型,但不是新类型。C99标准新增了%zd转换说明用于printf()函数显示size_t类型的值,如果系统不支持%zd,可以使用%u或%lu代替%zd。示例:
#include <stdio.h> int main(void) { int x = 56; printf("x is %u bytes.\n", sizeof x); printf("Type int is %u bytes.\n", sizeof (int)); system("pause"); return 0; }
运行结果为:
x is 4 bytes. Type int is 4 bytes.
“%”称为求模运算符,用于整数运算,求模运算符给出其左侧整数除以右侧整数的余数。例如:
#include <stdio.h> int main(void) { int x = 8; int y = 3; printf("%d", x % y); system("pause"); return 0; }
运算结果为:
2
对于负数求模,C99标准规定“趋零截断”,即如果第1个运算对象是负数,那么求模结果便是负数;如果第1个运算对象是正数,那么求模结果就是正数。如果当前系统不支持C99标准,就会显示不同结果。实际上,无论如何,可以使用a-(a/b)*b来计算a%b,以得到一致的结果。
递增运算符写作“++”,用于将运算对象递增1。有两种使用方式,第1种方式是++位于变量前面,即前缀模式;第2种方式是++位于变量后面,即后缀模式。两种模式的相同点是都可以实现递增1,区别在于递增行为的发生时间不同。示例:
#include <stdio.h> int main(void) { int x, y; x = y = 5; x = x++; y = ++y; printf("x=%d\n", x); printf("y=%d\n", y); system("pause"); return 0; }
运行结果为:
x=5 y=6
从以上结果可以看出,与赋值语句一同使用时,前缀模式先递增再赋值;后缀模式先赋值再递增。当然,如果单独使用递增运算符时,两种模式都是一样的。
与递增运算符对应的,还有一个递减运算符,写作“--”,也有前缀模式和后缀模式之分,特性与递增运算符是一样的,只是功能用于将运算对象递减1。
递增运算符和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高。因此,x*y++表示的是(x)*(y++),而不是(x*y)++。当然,(x*y)++是无效的,因为,递增和递减运算符只能用于一个变量(可修改的左值),而组合x*y本身不是可修改的左值。示例:
#include <stdio.h> int main(void) { int x = 3; int y1 = 4; int y2 = 4; int z = (x + (y1++))*3; int w = (x + (++y2))*3; printf("z=%d\n", z); printf("w=%d\n", w); system("pause"); return 0; }
运行结果为:
z=21 w=24
以上结果表明,对于n++来说,是先使用,再递增;对于++n来说,是先递增,再使用。
对于递增和递减运算符使用时应当注意:
如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符。
如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6