(嵌入式八股)No.1 C语言(2)
2.1 进制基础
常用进制表示
无论是使用哪种语言,使用哪种“进制”,描述的都是同一个“数值”。
int decimal = 100; // 十进制
int binary = 0b1100100; // 二进制(C99标准支持,前缀0b)
int octal = 0144; // 八进制(前缀0)
int hex = 0x64; // 十六进制(前缀0x)
#include <stdio.h>
int main() {
int num = 100;
printf("十进制: %d\n", num); // 100
printf("八进制: %o\n", num); // 144
printf("十六进制: %x\n", num); // 64(小写)
printf("十六进制: %X\n", num); // 64(大写)
printf("带前缀十六进制: %#x\n", num); // 0x64
return 0;
}
进制之间的转换
16进制里,每一位的权重,从右往左数,分别是:16^0, 16^1, 16^2, 16^3, 16^4, ……。
8进制里,每一位的权重,从右往左数,分别是:8^0, 8^1, 8^2, 8^3, 8^4, ……。
2进制里,每一位的权重,从右往左数,分别是:2^0, 2^1, 2^2, 2^3, 2^4, ……。
各进制对照表
2.2 命名规则与语法
标识符命名规则
- 允许字符:字母(A-Z, a-z)、数字(0-9)、下划线(_)
- 开头字符:必须是字母或下划线(不能是数字)
- 大小写敏感:count 与 Count 是不同的变量
- 长度限制:C89标准至少31个字符有效,C99至少63个字符
- 关键字不能作为标识符(如int, if, for等)
命名规范示例
// 良好命名示例 int student_count; // 小写+下划线(snake_case) float averageScore; // 驼峰命名法 #define MAX_SIZE 100 // 宏定义全大写 const float PI = 3.14; // 常量可首字母大写 // 非法命名示例 int 2nd_value; // ❌ 以数字开头 float total-score; // ❌ 包含减号 char int; // ❌ 使用关键字
常见命名约定
// 变量:描述性名词 int age, counter, buffer_size; // 函数:动词开头 void calculate_total(); int get_max_value(); // 指针:p开头或ptr结尾 int *p_data; int *data_ptr; // 布尔类型:is/has/can开头 int is_valid; int has_finished;
操作符优先级
2.3 库函数(如果你的技术栈是 c 语言的话,面试官可能会考察一些库函数的底层实现)
sizeof 和 strlen(这个在笔试里面会考)
sizeof 和 strlen 是两个非常常用的运算符和函数,它们在功能和用途上有明显的区别。
区别
示例
//普通变量
int a = 10;
printf("%zu\n", sizeof(a)); // 输出:4(假设 int 为4字节)
// strlen(a); ❌ 错误:a不是字符串
//字符串常量 vs 字符数组
char str1[] = "Hello";
char *str2 = "Hello";
printf("%zu\n", sizeof(str1)); // 6 (包括 '\0')
printf("%zu\n", sizeof(str2)); // 8 (指针本身的大小,在64位系统上)
printf("%zu\n", strlen(str1)); // 5 (不含 '\0')
printf("%zu\n", strlen(str2)); // 5
解释:
sizeof(str1):数组占 6 个字节('H','e','l','l','o','\0')
sizeof(str2):只返回指针大小(通常 8 字节)
strlen(str1) / strlen(str2):计算字符串内容长度(直到 \0)
//字符串中途有 \0
char msg[] = "Hi\0NEU";
printf("%zu\n", sizeof(msg)); // 7 (包含整个数组长度)
printf("%zu\n", strlen(msg)); // 2 (到第一个 '\0' 为止)
strlen() 会在遇到第一个 \0 时停止计数,而 sizeof 不会。
总结
- sizeof: 用于获取变量或数据类型的大小(以字节为单位)。在编译时计算,不会增加运行时的开销。适用于数组、结构体、变量等。
- strlen: 用于计算字符串的长度(以字符为单位)。在运行时计算,会逐个字符检查字符串,直到遇到终止符 \0。适用于字符串操作,但需要注意字符串的初始化和合法性。
malloc 和 calloc(这个也会考)
malloc 和 calloc 是两个用于动态内存分配的标准库函数。它们都属于 <stdlib.h> 头文件,用于在运行时分配内存。
二者对比
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int *p1 = (int *)malloc(5 * sizeof(int));
int *p2 = (int *)calloc(5, sizeof(int));
for (int i = 0; i < 5; i++)
printf("malloc[%d] = %d, calloc[%d] = %d\n", i, p1[i], i, p2[i]);
free(p1);
free(p2);
return 0;
}
输出:
malloc[0] = -858993460, calloc[0] = 0
说明 malloc 分配的内存未初始化,而 callo
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
泻湖花园嵌入式Offer指南 文章被收录于专栏
从入门到上岸,一站式搞定求职! 本硕纯机械,无竞赛无论文,后转行嵌入式软件开发(因为课题组师哥转嵌入式拿到30Woffer之后狠狠心动),秋招最终收获35W+offer可以为27届或者28届的的UU们提供参考,可以关注一下!!!


