知识点:
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等。
2、堆区(heap):一般由程序员分配释放,随叫随到,挥之即走。
3、全局/静态区(global/static):全局变量和静态变量的存储是放在一起的,在程序编译时分配。
4、文字常量区:存放常量字符串。-常量不能修改-同一个名字只保存一份
5、程序代码区:存放函数体(包括类的成员函数、全局函数)的二进制代码-以上以外的所有执行指令
示例:
#include <stdio.h>
#include <stdlib.h>
#define WORKER_MAX 64
//①栈区:函数内部局部变量,函数形参
void sayLove(const char *msg){
if (msg) {
if (msg == "larry") {
printf("Love you~\n");
}
else {
printf("Hello,%s\n", msg);
}
}
}
//②堆区:动态内存
//③全局区和静态区:全局变量和静态变量
int patriarch = 66;
void boudoir(int family){
static int girl = 18;
if (girl == 18){
girl = 19;
}else {
girl = 10;
}
printf("girl=%d\n", girl);
printf("boudoir patriarch=%d\n", patriarch);
}
//④常量区:常量字符串
//⑤程序代码区:函数体(包括类的成员函数、全局函数)的二进制代码
int main1(){
//-----------①-----------
sayLove(" ");//Hello, \n
//-----------②-----------
int *salary = NULL;
int n;
printf("请输入雇佣人数:");
//scanf_s("%d", n);×
scanf_s("%d", &n);
if (n == 1){
//=salary = new int(2000);
salary = new int;//分配单个动态内存
*salary = 2000;//赋值
printf("雇佣的一名工人的薪资为:%d\n", *salary);//打印
delete salary;
}else if (n > 1){
salary = new int [n];//分配多个动态内存-WHY1:按需分配,不浪费内存
//一次性内存拷贝
for (int i=0; i<n; i++){//赋值
*(salary+i) = i + 2000;//第1位薪资为2000,第n位工资为2000+n-1
}
for (int i=0; i<n; i++){//打印
printf("雇佣的第%d位工人的薪资为:%d\n", i+1, *(salary+i));
}
//=free (salary);
delete [] salary;
}else if (n <= 0){
printf("输入人数错误!\n");
}
//-----------③-----------
boudoir(0);
boudoir(0);//静态变量只初始化一次
cout << "这里的静态变量:"<<girl << endl;
//girl×
//只函数内部调用有效
printf("main patriarch=%d\n", patriarch);
//-----------④-----------
const char *p1 = "童养媳";//两指针指向同一常量字符串,观察两指针内容的地址
const char *p2 = "童养媳";
printf("p1=0x%p p2=0x%p\n", p1, p2);//p1=p2-同一常量字符串只占用一个地址空间
system("pause");
return 0;
}