/**********************************************************************
* * Copyright (c)2015,WK Studios
* * Filename: A.h
* * Compiler: GCC vc 6.0
* * Author:WK
* * Time: 2015 4 8
* **********************************************************************/
#include <iostream>
#include <assert.h>
using namespace std;
void VarInit(unsigned char *pucArg)
{
*pucArg = 1;
return;
}
void Test()
{
unsigned long ulGlobal=259;
VarInit((unsigned char*)&ulGlobal);
printf("%lu\n",ulGlobal);
unsigned long ulGlobal2=258;
VarInit((unsigned char*)&ulGlobal2);
printf("%lu\n",ulGlobal2);
unsigned long ulGlobal3=-1;
printf("%lu\n",ulGlobal3);
VarInit((unsigned char*)&ulGlobal3);
printf("%lu\n",ulGlobal3);
return;
}
void main()
{
Test();
}
注意指针所指的数据的类型
这里只是改变了unsigned long的第一个字节
下面是在32位下小端机内存的存储情况
以第一个259为例
地址
0018ff44 03 01 00 00
改变后变成
地址
其实就是 十六进制的 01 01 = 257
整个程序的运算结果是:
257
257
4294967295
4294967041
再看一个程序:
#include <iostream>
#include <assert.h>
using namespace std;
void AddFunc(unsigned int a, unsigned int b, unsigned int *c)
{
*c = a + b;
printf("%d\n",*c);//这个大括号模块里面是以无符号整型进行解析
}
void main()
{
unsigned char e = 200;
unsigned char f = 100;
unsigned char g = 0;
AddFunc((unsigned int)e,(unsigned int)f,(unsigned int*)&g);
printf("%d\n",g);//这是以无符号char型进行解析
}
输出结果:
300
44