当前程序堆,栈和static,指针分析
typedef struct JXPalmUser{
uint8_t* pv;
char name[255];
}User;
int main(void){
User user;
printf("User addr :%d\n",user);
printf("User.name addr: %d\n",user.name);
static User sUser;
printf("static User addr: %d\n",sUser);
printf("static User.name addr: %d\n",sUser.name);
int32_t i = 10;
printf("proc addr: %d\n",&i);
User* pUser = (User*)malloc(sizeof(User));
printf("malloc ptr User addr: %d\n",pUser);
printf("malloc ptr User.name addr: %d\n",pUser->name);
static User* spUser = (User*)malloc(sizeof(User)*1);
printf("malloc static ptr User addr: %d\n",spUser);
printf("malloc static prt USer->name addr: %d\n",spUser->name);
return 0;
}
输出
User addr :1288599656
User.name addr: 1288599400
static User addr: 6296008
static User.name addr: 6295752
proc addr: 1288599380
malloc ptr User addr: 22253584
malloc ptr User.name addr: 22253592
malloc static ptr User addr: 22253856
malloc static prt USer->name addr: 22253864
#include <iostream>
class A
{
public:
int index;
std::string name;
static A& getInstance();
static void show_sta(std::string name);
void show_nonSta(std::string name);
A();
};
A::A()
{
index =1;
name = "xjh";
}
void A::show_sta(std::string name)
{
std::cout<<name<<" say:I am static."<<std::endl;
}
void A::show_nonSta(std::string name)
{
std::cout<<name<<" say: I am non static."<<std::endl;
}
A& A::getInstance()
{
static A a;
return a;
}
void func()
{
std::cout<<"using func"<<std::endl;
}
void func2()
{
std::cout<<"usning func2"<<std::endl;
}
int main(int argc, char *argv[])
{
std::cout<<"start"<<std::endl;
{
//create instance
A& a_getIns = A::getInstance();
a_getIns.show_sta("a_getIns");
a_getIns.show_nonSta("a_getIns");
std::cout<<"a_getIns.index:"<<a_getIns.index<<std::endl;
std::cout<<"a_getIns.name:"<<a_getIns.name<<std::endl;
A& aa_getIns = A::getInstance();
A::show_sta("A::show_sta");
aa_getIns.show_nonSta("A::can not use show_nonSta");
std::cout<<"aa_getIns.index:"<<aa_getIns.index<<std::endl;
std::cout<<"aa_getIns.name:"<<aa_getIns.name<<std::endl;
//change prop
a_getIns.index = 2;
a_getIns.name = "abc";
std::cout<<"aa_getIns.index:"<<aa_getIns.index<<std::endl;
std::cout<<"aa_getIns.name:"<<aa_getIns.name<<std::endl;
aa_getIns.index = 22;
aa_getIns.name="aa_getInsbbcc";
std::cout<<"aa_getIns.index:"<<a_getIns.index<<std::endl;
std::cout<<"aa_getIns.name:"<<a_getIns.name<<std::endl;
//create by normal, new, static
A b_nonSta;
b_nonSta.show_nonSta("b_nonSta");
b_nonSta.show_sta("b_nonSta");
A* c_new = new A();
c_new->show_nonSta("b_nonSta");
c_new->show_sta("b_nonSta");
A d_static;
d_static.show_nonSta("b_nonSta");
d_static.show_sta("b_nonSta");
func();
func2();
delete c_new;
}
std::cout<<"end"<<std::endl;
}
进入code block前
在block中
block结束