1.int与unsigned int隐式转换
int main()
{
unsigned int a = 6;
int b = -20;
(a+b)>6?printf(">6\n"):printf("<6\n");
return 0;
}
结果是 >6
https://blog.youkuaiyun.com/yinzewen123/article/details/80547836
2.向指定地址写入数据
在地址0x100上写入0x200
#include "stdio.h"
int main()
{
int *p;//定义一个整形指针
p = (int *)0x100;//将常量0x0019FF3C强制转化为整形地址,用p指向它
*p = 0x200;//向该地址写入数据
printf("%x\n",*(int *)0x100);//输出0x0019FF3C地址的数据
return 0;
}
3.
char a[1000];
for (int i = 0; i < 100; i++){
a[i] = -1 - i;
}
问:strlen(a)
a[255]==0;而strlen遇到’\0’(对应数值0)结束;所以是255.
4.大端字节序(big endian)和小端字节序(little endian)。
大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
小端字节序:低位字节在前,高位字节在后。
#include<stdio.h>
#define LBS 0
#define MBS 1
{
int main(int)
{
int a=0x12345678;
char *p;
p = (char *)&a;
if(*p == 0x12){ //大端
return MBS;
}else if(*p == 0x78){ //小端
return LBS;
}
}
5.内存对齐问题和修改默认对齐数
struct A{
char c;
int a;
};
32位操作系统上结构体大小为8
可以通过# pragma pack(1)修改默认对齐数将结构体大小变为5
ps:默认对齐数可以为1/2/4/8/16
6.strcpy和memcpy的区别
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy