1.sizeof
操作符
——sizeof
操作符的作用:
用于计算数据类型或变量在内存中所占的字节数,它返回的是一个 size_t
类型的结果,表 示字节数。
——题外补充知识:
1字==2字节;1字节==8位(0x1A代表一个字节);
——STM32中的字节理解——因为字可以因计算机架构和操作系统而不同。在不同的系统中,“字”可能指代不同的位数,通常是指定的固定位数。
在STM32微控制器中,
一个字通常由32位(4个字节)组成,
一个字====8个十六进制数字组成。0x1A 2B 3C 4D代表一个字
假设在STM32中有一个字的十六进制表示为:(0x1A2B3C4D代表一个字)。
这个十六进制值表示了一个32位的字,其中每两个十六进制数字表示一个字节。在这个例子中,这个字被分为四个字节,每个字节的十六进制值如下:
- 第一个字节:0x1A
- 第二个字节:0x2B
- 第三个字节:0x3C
- 第四个字节:0x4D
因此,整个字的十六进制表示为 0x1A2B3C4D,其中包含了四个字节的十六进制值。这种表示方式在STM32开发中经常用于操作寄存器或内存中的数据。
——题外知识:
size_t
类型是什么类型?
size_t
是一种标准整数数据类型,通常被用来表示内存中对象的大小。它是在 C 和 C++标准库中定义的,可以保证能够存储系统中最大可能的对象大小。具体来说,
size_t
类型的大小是足以容纳系统中最大可能对象的大小的无符号整数类型。
size_t
类型的大小是根据不同编译器和系统的具体实现而有所不同。在大多数情况下,size_t
被定义为 unsigned int
或 unsigned long
类型,取决于编译器和系统的位数。在 32 位系统上,size_t
通常是 unsigned int
,而在 64 位系统上,size_t
通常是 unsigned long
。
2.strlen
函数——<string.h>
头文件
——strlen
函数作用:
计算以 NULL 结尾的字符串的长度,即返回字符串中字符的数量,不包括 NULL 终止符。
3.strlen
函数和关键字sizeof的区别
strlen
和 sizeof
在计算字符串长度或大小时有明显的区别。具体区别如下:
——strlen
函数:
strlen
函数用于计算以 NULL 结尾的字符串中的字符数量(不包括 NULL 终止符)。
strlen
函数是一个库函数,需要包含头文件 string.h
。
strlen
函数只适用于以 NULL 结尾的字符串,不适用于其他类型的数据结构。
返回值为一个整数,表示字符串的长度。
——sizeof
操作符:
sizeof
操作符用于计算数据类型或变量在内存中所占的字节数。
对于数组,sizeof
返回整个数组占用的字节数,包括所有元素和 NULL 终止符。
对于指针,sizeof
返回指针本身的字节数,而不是指向的数据所占的字节数。
sizeof
是一个编译时计算的操作符,返回的结果是在编译时确定的常量。
——总结:使用 strlen
函数来获取以 NULL 结尾的字符串的长度,
使用 sizeof
操作符来获取数组或变量的字节数。
4.具体编程及其结果
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello"; // 字符串数组
char *ptr = "Hello"; // 字符串指针
// 使用 strlen 函数获取字符串长度
int length_str = strlen(str);
int length_ptr = strlen(ptr);
// 使用 sizeof 操作符获取数组长度
int size_str = sizeof(str) - 1; // 减去 NULL 终止符
int size_ptr = sizeof(ptr);
printf("Using strlen:\n");
printf("Length of str: %d\n", length_str);
printf("Length of ptr: %d\n", length_ptr);
printf("\nUsing sizeof:\n");
printf("Size of str: %d\n", size_str);
printf("Size of ptr: %d\n", size_ptr);
return 0;
}
——调试结果是:
使用sizeof计算的指针变量是: Size of ptr:4;——STM32 中,如果计算机64位,那么就是8。
-
在 32 位体系结构的计算机上,指针变量通常占用 4 个字节(32 位),因为它们需要足够的空间来存储一个 32 位的地址。
-
在 64 位体系结构的计算机上,指针变量通常占用 8 个字节(64 位),因为它们需要足够的空间来存储一个 64 位的地址。