2、变量的本质,内存四区

变量的本质
内存的别名。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int main()
{
  int a;
  a = 10;
  printf("&a :%d\n",&a);//6422044
  *((int *)6422044) = 100;
  printf("a :%d\n",a);//6422044
}

运行结果结果
在这里插入图片描述

内存四区
栈区:程序局部变量区。
堆区:Malloc/new free/delete,操作系统管理
全局区:常量和全局变量,操作系统管理
代码区:操作系统管理

#include<stdio.h>
#include<stdlib.h>
#include<string.h>



char *getStr1()
{
    char *p1 = "abcdefg";
    return p1;
}

char *getStr2()
{
    char *p2 = "abcdefg2";
    return p2;
}

int main()
{
 char *p1 = NULL;
 char *p2 = NULL;
 p1 = getStr1();
 p2 = getStr2();

 //打印p1 p2内存空间的数据
 printf("p1 :%s, p2 :%s\n",p1,p2);

 //打印p1 p2的值
 printf("p1 :%d, p2 :%d\n",p1,p2);
}



运行结果
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>



char *getStr1()
{
    char *p1 = "abcdefg2";
    return p1;
}

char *getStr2()
{
    char *p2 = "abcdefg2";
    return p2;
}

int main()
{
 char *p1 = NULL;
 char *p2 = NULL;
 p1 = getStr1();
 p2 = getStr2();

 //打印p1 p2内存空间的数据
 printf("p1 :%s, p2 :%s\n",p1,p2);

 //打印p1 p2的值
 printf("p1 :%d, p2 :%d\n",p1,p2);
}

运行结果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
当相同的时候 p1 和 p2 指向同一个内存空间,因为c++会做代码优化。

栈区和堆区的理解

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


char *getMem(int num)
{
  char *p1  =NULL;
  p1 = (char*)malloc(sizeof(char)*num);
  if(p1==NULL)
  {
   return NULL;
  }
  return p1;
}

int main()
{
  char *tem = NULL;
  tem = getMem(10);
  if(tem ==NULL)
  {
      return 0;
  }
  strcpy(tem,"111222");
  printf("%s\n",tem);

}

运行结果:
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


char *getMem(int num)
{
  char *p1  =NULL;
  p1 = (char*)malloc(sizeof(char)*num);
  if(p1==NULL)
  {
   return NULL;
  }
  return p1;
}

char *getMem2()
{
    char buf[64];//临时变量,栈区存放
    strcpy(buf,"123456");
    printf("buf:%s\n",buf);
    return buf;
}

int main()
{
  char *tem = NULL;
  tem = getMem(10);
  if(tem ==NULL)
  {
      return 0;
  }
  strcpy(tem,"111222");

  tem =getMem2();
  printf("tem:%s\n",tem);
}

注意:return不是吧内存块64个字节,给return出来而是把内存块的首地址(内存的标号0xaa11)返回给tem;

理解指针的关键是在内存,没有内存哪里的指针。

运行结果:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值