栈和局部变量 计算机系统的字节存储方式

1、函数形参和局部变量是保存在栈中的,在Windows中栈是从高地址向低地址扩展的。

(下面这个例子是错误的,不过原理是正确的)

我们可以从下面的例子中直观的看到:
#include <stdio.h>
int main(void)
{
char s[]="123456789";
char d[]="123";
strcpy(d,s);
printf("%s,/n%s",d,s);
return 0;
}
结果输出:123456789,56789。
解析:栈是从高地址向低地址扩展的,因此先定义的局部变量的地址高,后定义的局部变量的地址低。故在内存中从低到高是如下排列的(拷贝 前):123/0123456789/0。调用了strcpy后变成了:123456789/06789/0。这要从strcpy(d,s)函数的实现解 释:它将s的所有字符拷贝到d中,只到它遇到字符串结束符'/0',而对d,s是否越界没有进行检查,所以出现上面的奇怪的输出。

2、计算机系统的字节存储方式主机有两种:大端模式和小端模式。所谓大端小端可以这样理解,如果在低地址位存放的是一个整数的最低有效位,则是小端模式;如果低地址位存放的是一个整数的最高有效位,则是大端模式。
那么如何编程来测试一个计算机是大端模式还是小端模式呢,这用到了C语言中联合体的特殊性质,程序如下:
#include <stdio.h>
union{
unsigned int i;
unsigned char c;
}u;

int main()
{
u.i=0xf0f1f2f3;
printf("%x/n",u.i);
printf("%x/n",(unsigned int)u.c);
return 0;
}
在我的计算机上输出结果为:
f0f1f2f3
f3
变量的地址采用它的低地址表示,可见上面的程序在低地址中存放了一个整数的最低有效位(f3),因此可以得出我的计算机的字节存储模式是小端模式。

 

http://hi.baidu.com/gruceelee/blog/item/7990785d5e21ce272834f0bc.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值