c语言中变量在内存中的本质


C语言当中所有变量本质都是一个地址。

1.

int nNum = 'XXOO';

printf_s("%s", &nNum);


看到上面的例子没有,int变量怎么可以存字符呢,但是确实可以。通过把字符存到整形变量里面,再用字符串的形式输出。

但是请记住,在64位,32位的编译器中int占4个字节。所以只能写XXOO。写多了就错了!!!

2.

c中存在局部变量和和全局变量,

我们知道变量存在栈区中,怎么通过修改内存地址对应的值的方法来改变量的值呢?


void fun(){
int nNum[2] = {0};
nNum[0] = 0xAAAABBBB;
printf("nNum数组首位的地址 %p\n", &nNum[0]);
printf("nNum数组首位的十六位地址值 %p\n", nNum[0]);


printf("nNum数组第二位的地址 %p\n", &nNum[1]);
printf("nNum数组第二位的十六位地址值 %p\n", nNum[1]);
nNum[0x3A] = 0xCCCCDDDD;


return;
}


//全局变量  局部变量
int _tmain(int argc, _TCHAR* argv[])
{
int nNum = 0x11112222;
printf("nNum 的地址 %p\n", &nNum);
printf("nNum 的地址值十六进制表示 %p\n", nNum);


fun();
printf("nNum 的地址 %p\n", &nNum);
printf("nNum 的十六位地址值 %p\n", nNum);
return 0;
}


看上面这个神奇的例子,通过调用函数,也没有传指针,引用啥的就把nNum的值给改了。

这个例子中最重要的 0x3A 是通过 main函数里面的nNum的内存地址-fun函数里面的nNum的内存地址/4 ,除以4主要是一个int类型在内存中占4个字节。所以就可以改掉main中nNum的值了。神奇吧~


3.还有变量的存储在内存中是低位在前 高位在后  例如  12 31 AB CD 存的是 CD AB 31 12

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值