Linux c编程一站式学习笔记(08), 几个运算符

本文详细解析LinuxC中的逗号运算符、sizeof运算符与typedef类型别名的用法,包括它们的工作原理、应用场景以及注意事项。通过实例说明,帮助读者更好地掌握这三种核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个是<<Linux c 一站式学习>>中的总结,有较多摘录, 详细请查看原书246页

()逗号运算符(CommaOperator)

也是一种双目运算符,它的形式是表达式1,表达式2,两个表达式不要求类型一致,左边的表达式1先求值,

求完了直接把值丢掉,再求右边表达式2的值作为整个表达式的值。逗号运算符是左结合的,类似于+- * /运算符,根据组合规则可以写出表达式1,表达式2,表达式3,...,表达式n这种形式,表达式1,表达式2可以看作一个子表达式,先求表达式1的值,然后求表达式2的值作为这个子表达式的值,然后这个值再和表达式3组成一个更大的表达式,求表达式3的值作为这个更大的表达式的值,依此类推,整个计算过程就是从左到右依次求值,最后一个表达式的值成为整个表达式的值。

注意,函数调用时各实参之间也是用逗号隔开,这种逗号是分隔符而不是逗号运算符。但可以这样

使用逗号运算符:

f(a, (t=3, t+2), c)

传给函数f的参数有三个,其中第二个参数的值是表达式t+2的值。

()sizeof

比如用sizeof运算符求一个数组的长度:

int a[12];

printf("%d\n",sizeof a/sizeof a[0]);

在上面这个例子中,由于sizeof表达式中的子表达式不需要求值,所以不需要到运行时才计算,

实上在编译时就知道sizeofa的值是48,sizeof a[0]的值是4,所以在编译时就已经把sizeof

a/sizeof a[0]替换成常量12,这是一个常量表达式。

sizeof运算符的结果是size_t类型的,这个类型定义在stddef.h头文件中,不过你的代码中只要不

出现size_t这个类型名就不用包含这个头文件,比如像上面的例子就不用包含这个头文件。C标准

规定size_t是一种无符号整型,编译器可以用typedef做一个类型声明:

typedef unsigned longsize_t;

那么size_t就代表unsignedlong型。不同平台的编译器可能会根据自己平台的具体情况定

size_t所代表的类型,比如有的平台定义为unsignedlong,有的平台定义为unsignedlong

long ,C标准规定size_t这个名字就是为了隐藏这些细节,使代码具有可移植性。所以注意不要

size_t类型和它所代表的真实类型混用,例如:

unsigned long x;

size_t y;

x = y;

如果在一种ILP32平台上定义size_t代表unsignedlong long ,这段代码把y赋给x时就把高位截

掉了,结果可能是错的。

()typedef

typedef这个关键字用于给某种类型起个新名字,比如上面的typedef声明可以这么看:

typedef就成了一个变量声明unsignedlong size_t; size_t是一个变量名,类型是unsigned

long ,那么加上typedef之后,size_t就是一个类型名,就代表unsignedlong类型。再举个例子:

typedef chararray_t[10];

array_t a;

这相当于声明chara[10];。类型名也遵循标识符的命名规则,并且通常加个_t后缀表示Type


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值