sizeof的应用
判断输出值:
#include<stdio.h>
void test(int arr[])
{
printf("%d\n", sizeof arr);
}
void try(char ch[])
{
printf("%d",sizeof ch);
}
int main()
{
int arr[10] = { 0 };
char ch[10] = { 0 };
//sizeof是单目操作符,可以不加()而使用,判断类型所占字节大小就不行
printf("%d\n", sizeof arr);
printf("%d\n", sizeof ch);
test(arr);
try(ch);
return 0;
}
-
sizeof
操作符:在main
函数中,sizeof arr
和sizeof ch
会分别返回整个arr
数组和ch
数组的大小(以字节为单位)。由于arr
是int
类型的数组,每个int
通常占用 4 字节(这取决于编译器和平台),所以sizeof arr
会是4 * 10 = 40
。同理,ch
是char
类型的数组,每个char
占用 1 字节,所以sizeof ch
会是1 * 10 = 10
。 -
test
函数:在这个函数中,arr
参数是一个指向int
的指针(尽管在函数声明中它是数组形式,但在函数内部它退化为指针)。因此,sizeof arr
在这里实际上是返回指针的大小,而不是数组的大小。在大多数现代系统上,指针的大小是 4 字节(32位系统)或 8 字节(64位系统)。
输出结果 40 10 8 8
比较字符串是否相同
使用函数:
#include <string.h>
if (strcmp(str1, str3) == 0)
来判断是否相等
逻辑操作符
易错点:
i=a++||++b||c++;
//b的值是否+1了?
-
操作符优先级:逻辑或(
||
)操作符的优先级低于前缀递增(++x
)和后缀递增(x++
),但在这个表达式中,由于递增操作符直接作用于变量,而逻辑或操作符用于比较这些递增操作的结果,所以递增操作会首先发生(尽管对于后缀递增来说,递增的“可见性”会延迟). -
逻辑或的短路行为:逻辑或操作符(
||
)具有短路行为,即如果第一个操作数(在这里是a++
的结果)为真(非零),则不会计算第二个和第三个操作数(++b
和c++
)。这是因为逻辑或只需要一个真值就可以确定整个表达式的真值。同理&&也是这样的。
b的值没有+1