强制类型转换
要求取一个字节后的两个字节(0x11223344,要取0x2233)
#include <stdio.h>
int main(int argc,char * argv[])
{
int num = 0x11223344;
//指针与变量建立链接
int* p = #
//指针p强转成char*步长为一个字节,加一向前走一个字节
//强转成short*步长为两个字节
//最后在对其解引用,得到地址的内容
printf("%#x\n", *((short*)((char*)p + 1))); //0x2233
return 0;
}
这种情况实际开发中出现的非常多,没啥好办法只能多练,实际上即使在C++中各种类型转换应用也很多.(毕竟设计完美的时候很少)
对了需要在提醒一下,十六进制,八进制,无符号是内存原样输出(因为他们没有负数源码和补码一样)
指针的初始化
#include <stdio.h>
int main(int argc,char * argv[])
{
//指针也是变量,只不过存储的是地址
//p是一个局部指针变量,如果没有初始化,会产生随机的垃圾地址(野指针)
//这个地址能否进行操作不确定(其实就是不能操作)
//如果对其操作会发生段错误(运行中的错误)
//我用的VS直接编译不过这个我就不掩饰了,没什么意义
//int* p;
//printf("*p = %d\n", *p);
//常规初始化
//#define NULL ((void *)0) c语言库中的定义(值得一说的是在C++中并不是这样的)
int* p = NULL;
return 0;
}
指针的升级降级操作
#include <stdio.h>
//由于C语言中无法显示类型,这里用下C++
#include <iostream> //C++
#include <typeinfo> //C++
using names