C笔记--内存四区

内存四区

常见的数据类型



数据类型的本质

从编译器角度理解:

  • 数据类型可理解为创建变量的模具(模子);是 固定内存大小 的别名。
  • 数据类型的作用:编译器预算对象(变量) 分配 的内存空间大小。
    
 测试数据大小的程序:
//

sizeof是操作符,不是函数;sizeof测量的实体大小为编译期间就已确定

int main()
{
int a = 10;
int b[10] ;
printf("int a:%d \n", sizeof(a));
printf("int a:%d \n", sizeof(int *));
printf("int b:%d \n", sizeof(b));
printf("int b:%d \n", sizeof(b[0]));
printf("int b:%d \n", sizeof(*b));
printf("hello.....\n");
getchar();
return 0;
} 

数据类型封装

   
Ø1、void的字面意思是“无类型”,void*则为“无类型指针”,void*可以指向任何类型的数据。
Ø2、用法1:数据类型的封装

   

 intInitHardEnv(void**handle);

     典型的如内存操作函数memcpy和memset的函数原型分别为

 void*memcpy(void*dest,constvoid *src,size_tlen);
 void*memset( void * buffer, intc, size_tnum); 


Ø3、用法2:  void修饰函数返回值和参数,仅表示无。

        如果函数没有返回值,那么应该将其声明为void型

       如果函数没有参数,应该声明其参数为void

     intfunction(void)
     {return1;}

Ø4、void指针的意义

      C语言规定只有相同类型的指针才可以相互赋值

      void*指针作为左值用于“接收”任意类型的指针

      void*指针作为右值赋值给其它指针时需要强制类型转换

      int*p1 = NULL;
      Char *p2 = (char *)malloc(sizoeof(char)*20);


Ø5、不存在void类型的变量

      C语言没有定义void究竟是多大内存的别名

Ø6、扩展阅读 《void类型详解》


数据类型小结

Ø1、数据类型本质是固定内存大小的别名;是个模具,c语言规定:通过数据类型定义变量。
Ø2、数据类型大小计算(sizeof)
Ø3、可以给已存在的数据类型起别名typedef
Ø4、数据类型封装概念(void万能类型)

变量



Ø变量本质:(一段连续) 内存空间的别名


程序的内存四区模型

内存四区模型-建立流程




函数调用模型 








函数1调用函数2,函数1称为主调函数 函数2称为被调用函数

规则1:Main(主调函数)分配的内存(在堆区,栈区、全局区)都可以在被调用函数里使用吧。

规则2:在被调用函数里面分配的内存




1 、如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的。



全局区://c++编译器优化

得到的地址是一样的。
char *getStr1()
{
	char *p = "abcd1";
	return p;
}

char *getStr2()
{
	char *p = "abcd1";
	return p;
}

临时区stack 栈区


char * getStr3()
{
	char buf[100];
	memset(buf, 0, sizeof(buf));
	strcpy(buf, "abcd1");
	return buf;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值