指针 专题( (int *)强制转换成(char *),大小端)



1、如何避免野指针

将指针初始化为NULL,用完后也将其赋值为NULL。

2、什么是大小端模式?请用C语言写出判断函数。

大端模式:内存低地址存放 数据的高字节
小端模式:内存低地址存放 数据的低字节
比如:将一个32位的整数0x12345678存放到一个整型变量(int)中,
大端:12-34-56-78; 小端:78-56-34-12

#include <stdio.h>
void main()
{
	int x = 1;
	char *p = (char *)&x;	//强制类型转换, 指针变量的 地址数据 不变, 影响的只是指针的寻址(偏移)
	if (*p)	printf("Little-endian \n");	//X86 或者 STM32 运行时打印
	else 	printf("Big-endian \n");
}

3、(int *)强制转换成(char *)(注意:X86,STM32是小端模式)
#include <stdio.h>
int main()
{
	unsigned int a = 0x11223344;		//x86是 小端模式,按照 内存地址递增 存储数据: 44-33-22-11
	unsigned char i = (unsigned char)a;

	char *b = (char *)&a;			//强制类型转换, 指针变量的 地址数据 不变, 影响的只是指针的寻址(偏移)
	unsigned int *c = &a;

	printf("i= %x, *b = %x\n\n", i, *b);	//0x44, 0x44
	printf("&a= %08x\n\nb = %08x\n", &a, b);//00affe30, 00affe30(跟&a相等)
	b++;
	printf("b = %08x\n", b);	//00affe31(内存地址+1, 相对&a增加1)
	printf("*b = %x\n\n", *b);	//0x33

	printf("c = %08x\n", c);	//00affe30(跟&a相等)
	c++;
	printf("c = %08x\n", c);	//00affe34(内存地址+4)
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值