静态内存;堆内存;函数局部栈内存 demo程序(摘自C++程序员求职关键路径)

来源:互联网 发布:java 初始化错误异常 编辑:程序博客网 时间:2024/05/16 00:39
 

#include "iostream"
using namespace std;

char* get_memory1()
{
 char p[]="hello";//p这个数组变量的右值在函数局部栈上
 return p;//returning address of local variable or temporary
}

char* get_memory2()
{
 char *p="hello";//p这个指针指向的是一个静态存储区
 return p;//正常
}

char* get_memory3()
{
 char *p=(char*)malloc(sizeof("hello"));//p这个指针指向的是一个堆内存
 strcpy(p,"hello");
 return p;//正常
}

void main()
{
 char *p1=get_memory1();
 cout<<p1<<endl;
 
 char *p2=get_memory2();
 cout<<p2<<endl;

 char *p3=get_memory3();
 cout<<p3<<endl;

 if(p2==p3)
  cout<<"两个相同的字符串常量在静态存储器只占一份位置空间"<<endl;
 else
  cout<<"两个相同的字符串常量在静态存储器占两份不同的位置空间"<<endl;
 
}

 

 

 

另外:最近简单看了下C和指针中关于变量的讲解。弄清楚一个变量的作用域;链接属性;存储类型;是非常重要的

程序的编译生成目标文件; 然后链接成可执行文件;然后程序进入宿主机执行。