c语言常见错误
1 :大小端 问题
假设寄存器里存的是 0x12345678(32 位):
内存地址 | 小端存储 | 大端存储 |
---|---|---|
addr+0 | 0x78 | 0x12 |
addr+1 | 0x56 | 0x34 |
addr+2 | 0x34 | 0x56 |
addr+3 | 0x12 | 0x78 |
2 :地址赋值 的注意点
1:设置地址代码
在不同编译器可能有问题,例如下面的代码,u64 add2 不一定被初始化成为0了
#include <stdio.h>typedef unsigned long long u64;typedef struct
{u64 add : 40;u64 resv1 : 24;
} INFO;int main()
{INFO info = {0};info.add = 123;u64 add = info.add;printf("add = %llu\n", add);info.resv1 = 45;u64 add2 = info.add;printf("add2 = %llu\n", add2);return 0;
}
3. qsort 函数的使用
a-b 是升序
#include <stdio.h>
#include <stdlib.h>int cmp_int(const void *a, const void *b) {return (*(int *)a - *(int *)b); // 升序
}int main() {int arr[] = {42, 7, 19, 73, 2};int n = sizeof(arr) / sizeof(arr[0]);qsort(arr, n, sizeof(int), cmp_int);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}