嵌入式大厂面经 4(持续更新中!)
1. 指针的大小
- 指针大小与系统架构相关,而不是与指向的数据类型相关
- 32位系统:所有指针都是4字节
- 64位系统:所有指针都是8字节
示例代码:
void testPointerSize(void) { char *p1; int *p2; double *p3; void *p4; int (*p5)(int); // 函数指针 printf("char*: %d\n", sizeof(p1)); // 32位系统为4,64位为8 printf("int*: %d\n", sizeof(p2)); // 同上 printf("double*: %d\n", sizeof(p3)); // 同上 printf("void*: %d\n", sizeof(p4)); // 同上 printf("function*: %d\n", sizeof(p5)); // 同上 }
2. 函数指针和指针函数
函数指针
- 指向函数的指针
- 用于回调函数、函数表等场景
// 函数指针示例 typedef int (*Operation)(int, int); // 定义函数指针类型 int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } void testFunctionPointer(void) { Operation op = add; // 函数指针指向add函数 printf("Result: %d\n", op(5, 3)); // 输出8 op = sub; // 切换到sub函数 printf("Result: %d\n", op(5, 3)); // 输出2 }
指针函数
- 返回指针的函数
- 常用于动态内存分配、数组操作等
// 指针函数示例 int* createArray(int size) { return (int*)malloc(size * sizeof(int)); } char* getString(void) { return "Hello World"; } void testPointerFunction(void) { int* arr = createArray(5); // 返回int指针 char* str = getString(); // 返回char指针 // 使用完需要释放动态分配的内存 free(arr); }
3. strlen 和 sizeof 的区别
主要区别
- 类型strlen:函数,计算字符串长度sizeof:运算符,计算数据类型或变量的字节数
- 使用场景strlen:只用于字符串sizeof:可用于任何数据类型
- 计算方式strlen:遇到'\0'结束sizeof:编译时确定
示例代码:
void compareStrlenSizeof(void) { char str[] = "Hello"; char *ptr = "World"; printf("strlen(str) = %d\n", strlen(str)); // 输出5 printf("sizeof(str) = %d\n", sizeof(str)); // 输出6(包含'\0') printf("strlen(ptr) = %d\n", strlen(ptr)); // 输出5 printf("sizeof(ptr) = %d\n", sizeof(ptr)); // 32位系统输出4,64位输出8 // 数组示例 int arr[10]; printf("sizeof(arr) = %d\n", sizeof(arr)); // 输出40(10*4字节) }
注意事项
- strlen 不计算'\0',sizeof 计算所有字节
- sizeof 是编译时运算符,strlen 是运行时函数
- sizeof 可以用于未初始化的数组,strlen 必须用于以'\0'结尾的字符串
这些概念在C语言编程中非常重要,尤其是在内存管理和字符串处理方面。理解它们的区别和使用场景对于写出高质量的代码至关重要。
更多内容全在下方专栏
全网最受欢迎的嵌入式笔试专栏
笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学
3000+订阅还会涨价,提前订阅提前享受,持续更新中。
专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
#满分简历要如何准备?##嵌入式笔面经分享#