C语言笔记第八天

强制类型转换

要求取一个字节后的两个字节(0x11223344,要取0x2233)

#include <stdio.h>

int main(int argc,char * argv[])
{
	int num = 0x11223344;

	//指针与变量建立链接
	int* p = &num;

	//指针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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值