c中定义变量的内存分配顺序问题
2017-09-21 19:34
423 查看
1、局部变量,存储在栈中,其分配地址根据变量声明顺序是递减的,如i和j。i先声明,i的地址高,j后声明,j的地址低。
#include <iostream>
using namespace std;
int b;
int a;
int c;
int arr[2];
int d;
void main() {
int ar[2];
int i;
int j;
cout<<&i<<" "<<&j<<" "<<&ar[0]<<" "<<&ar[1]<<" "<<&ar[2]<<" "<<&ar[3]<<endl;
cout<<&a<<' '<<&b<<' '<<&c<<endl;
cout<<&arr[0]<<' '<<&arr[1]<<' '<<&arr[2]<<" "<<&c<<endl;
cout<<&arr[0]<<' '<<&arr[1]<<' '<<&arr[2]<<" "<<&d<<endl;
} 输出结果:
2、全局变量,存储在数据区(全局变量和静态变量),空间分配是按照声明变量的字母顺序按照空间递增顺序进行分配的。注意内存越界问题。
int b;
int a[2];
void main() {
cout<<&a[0]<<' '<<&a[1]<<' '<<&a[2]<<endl<<&b<<endl;
} 输出结果:
当先声明数组,再声明变量时,a[2]数组越界,a[2]的地址与b的地址一样。
int a[2];
int b;
void main() {
cout<<&a[0]<<' '<<&a[1]<<' '<<&a[2]<<endl<<&b<<endl;
} 输出:
#include <iostream>
using namespace std;
int b;
int a;
int c;
int arr[2];
int d;
void main() {
int ar[2];
int i;
int j;
cout<<&i<<" "<<&j<<" "<<&ar[0]<<" "<<&ar[1]<<" "<<&ar[2]<<" "<<&ar[3]<<endl;
cout<<&a<<' '<<&b<<' '<<&c<<endl;
cout<<&arr[0]<<' '<<&arr[1]<<' '<<&arr[2]<<" "<<&c<<endl;
cout<<&arr[0]<<' '<<&arr[1]<<' '<<&arr[2]<<" "<<&d<<endl;
} 输出结果:
2、全局变量,存储在数据区(全局变量和静态变量),空间分配是按照声明变量的字母顺序按照空间递增顺序进行分配的。注意内存越界问题。
int b;
int a[2];
void main() {
cout<<&a[0]<<' '<<&a[1]<<' '<<&a[2]<<endl<<&b<<endl;
} 输出结果:
当先声明数组,再声明变量时,a[2]数组越界,a[2]的地址与b的地址一样。
int a[2];
int b;
void main() {
cout<<&a[0]<<' '<<&a[1]<<' '<<&a[2]<<endl<<&b<<endl;
} 输出:
相关文章推荐
- c中定义变量的内存分配顺序问题(极易错!!!)
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- 关于构造函数析构函数以及成员变量内存分配顺序的一些问题
- 数据结构 学习笔记之:结构体及其所定义变量的内存分配的问题
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- C\C++编译器关于变量的内存分配顺序总结
- 类地内存分配问题及static变量问题
- C++栈区的变量分配 与 内存读写越界问题引发的coredump问题
- 关于全局变量内存分配的顺序
- C++程序变量在内存中的分配问题
- C\C++中结构体变量与结构体指针内存分配问题
- C语言中的全局变量内存分配和初始化顺序
- 宏定义函数指针类型&函数返回左值类值 1。宏定义不分配内存,变量定义分配内存。 2。宏名和参数的括号间不能有空格 3。宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); ty
- C\C++编译器关于变量的内存分配顺序总结
- C++类对象成员变量和成员函数内存分配的问题
- 经典问题1RE运行异常---将耗费内存的数组定义为成员变量
- PHP变量内存分配问题记录整理
- 全局变量,静态全局变量,静态局部变量,类静态成员内存分配与初始化问题
- C++类对象成员变量和成员函数内存分配的问题
- C++中的成员变量的内存分配问题