C语言的存储单元问题

问题一:怎样让,定义的全局变量的地址连续?能够举个例吗?
问题二:能够这样定义吗?
unsigned char a,b,c,d,e;
unsigned char Tab[]={a,b,c,d,e}

让全局变量拥有连续的地址有两种方法:
1. 定义数组,比如 unsigned char a[100];
这样就定义了一个长度为100的类型为unsigned char的数组,相当于100个unsigned char 类型的全局变量,他们的地址是连续的:第一个地址为a,第二个为a+1,……
2. 全局作用域中定义一个指针,然后在主函数main中为其动态分配内存,比如全局作用域中定义unsigned char *p,主函数中动态分配内存语句如下:
p=(unsigned char*)malloc( 100 * sizeof(unsigned char));
意义就是分配100个unsigned char 类型变量所占据的连续内存,使p指针指向该段内存的首地址。

我们并没有办法让不同类型的变量具有连续的地址,除非定义结构体,然后使用结构体类型定义全局变量。结构体定义如下:
struct S_Type{
int a;
double c;
};
struct S_Type s_var;
这时候s_var结构中有两个Field(其实也可以称为变量),其地址是连续的。
不过,该地址连续仅仅是指应用程序层次的地址连续。操作系统不一定会把该段地址空间映射到连续的物理内存地址上。然而,应用程序并不用关心物理内存地址。
还有一点,全局变量要么不初始化,要么必须用常量或者常量表达式初始化。
int a=100;
int b=a;
这么定义全局变量并初始化是不对的。尽管编译器可以知道a的值是100,但是它并不会去推断。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-11
1. 有什么意义呢?如果执意追求这一点,可以将需要连续分配的全局变量组合起来声明为一个结构体。
2. 不可以。
第2个回答  2011-10-11
用数组表示就可以了,或者动态分配 type *p = (type *)malloc(sizeof(type)); p[i]就可以引用。至于不同类型我就不知道了,因为不清楚标准里结构体是否为连续存储,不过一般的实现都是连续存储结构的。
相似回答