目录
描述
sizeof 本质不是一个函数
unsigned无符号类型
unsigned与signed的区别
unsigned的使用场景
sizeof 返回类型
sizeof 的使用
案例1
案例2
总结
描述
1.sizeof 本质不是一个函数,只是一个操作符,跟+ - * / 一样
2. unsigned无符号类型
3.sizeof 返回类型
4.sizeof 的使用
sizeof 本质不是一个函数
int test1()
{//对于数据类型 ,sizeof 必须要用 () 来使用printf("size of int: %d\n",sizeof(int));//对于变量是可以使用 () 或者去掉(),有两种选择double d = 3.14;printf("size of double: %d\n",sizeof d);printf("\n\n");
}
运行结果
对于数据类型,sizeof必须用()来使用,对于变量可以不用去掉(),可以看上面案例。
所以这个并不是一个函数,函数调用要求是一定要有()的。明显不是,只是一个操作符。
unsigned无符号类型
int test2() {unsigned int i = 10;if (i - 20 > 0) {printf("i 大于等于 0 \n");}else {printf("i 小于等于 0 \n");}printf("\n\n");
}
运行结果
我们可以看看打印结果
从上面结果来看如果不写无符号关键字,那么肯定是小于0的。
当unsigned int 和 int 类型数据做运算,编译器会将数据类型都转换的为unsigned int
在C语言中,unsigned
是一个关键字,用于声明无符号类型的变量。unsigned
修饰的整数类型只能表示非负值,而带符号的类型(即默认的int
类型)可以表示正数、负数或零。使用unsigned
声明的变量不能存储负数,其取值范围是从0到该类型能表示的最大正数。例如,一个32位的unsigned int
变量的取值范围是0到4294967295。12
unsigned与signed的区别
- 取值范围:
unsigned
类型的取值范围是有符号类型的两倍。例如,16位的signed short int
的取值范围是-32768到32767,而unsigned short int
的取值范围是0到65535。 - 默认声明:在C语言中,默认声明的整型变量是有符号的(
signed
)。如果需要声明无符号类型,必须在类型前加上unsigned
关键字。
unsigned的使用场景
- 存储非负数:当你知道一个变量将只用于存储非负数时,使用
unsigned
可以充分利用变量的每一位,因为不需要为负数保留位。 - 避免溢出:在某些情况下,使用
unsigned
可以避免因溢出而导致的错误。例如,在进行模运算时,使用unsigned
可以确保结果始终为正数。\
unsigned int a = 10; // 声明一个无符号整型变量a,并初始化为10
signed int b = -10; // 声明一个有符号整型变量b,并初始化为-10
sizeof 返回类型
sizeof 返回类型是unsigned int
我们可以验证一下:
int test2() {if (sizeof(int) - 5 > 0) {printf("i 大于等于 0 \n");}else {printf("i 小于等于 0 \n");}printf("\n\n");
}
运行结果:
以上结果是大于0的,unsigned如果减超出自己访问那么从最大开始减。
unsigned int 范围一般是 0~4294967295
我们可以看看运行代码
int test2() {unsigned int i = 10;i = i - 11;printf("i = %u\n\n",(i));printf("\n\n");
}
运行结果
sizeof 的使用
sizeof可以统计数组长度。
案例1
int test3() {int arr[] = { 1,2,3,4,5,6,7,8 };printf("arr len arr = %u\n\n", sizeof(arr));printf("\n\n");
}
运行结果
一共8个数据,每个数据是4个字节, 4*8 = 32
案例2
int arrayList(int arr[])
{printf("arr len arr = %u\n\n", sizeof(arr));
}
int test3() {int arr[] = { 1,2,3,4,5,6,7,8 };arrayList(arr);printf("\n\n");
}
运行结果
我们可以看到上面代码,通过一个函数传递,结果就变了。
当数组名作为函数参数的时候,会退化成一个指针,指向第一个元素。
总结
sizeof本质不是一个函数,而是一个操作符
1.当统计类型占内存空间的时候,必须要加小括号
2.当统计变量占内存空间的时候,可以不加小括号
sizeof的返回值类型是,无符号整型,unsigned int
sizeof 可以统计数组的长度
1.当数组名作为函数参数的时候,会退化成一个指针,指向第一个元素。