嵌入式大厂面经 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 的区别

主要区别

  1. 类型strlen:函数,计算字符串长度sizeof:运算符,计算数据类型或变量的字节数
  2. 使用场景strlen:只用于字符串sizeof:可用于任何数据类型
  3. 计算方式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字节)
}


注意事项

  1. strlen 不计算'\0',sizeof 计算所有字节
  2. sizeof 是编译时运算符,strlen 是运行时函数
  3. sizeof 可以用于未初始化的数组,strlen 必须用于以'\0'结尾的字符串

这些概念在C语言编程中非常重要,尤其是在内存管理和字符串处理方面。理解它们的区别和使用场景对于写出高质量的代码至关重要。

更多内容全在下方专栏

全网最受欢迎的嵌入式笔试专栏

笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学

3000+订阅还会涨价,提前订阅提前享受,持续更新中。

专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk

#满分简历要如何准备?##嵌入式笔面经分享#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务