C与C++成长之路——c提高一之变量和内存

第一天笔记

  1. 数组作为函数参数,数组形参退化为一级指针

    #include<iostream>
    
    using namespace std;
    
    //这里的[]其实没有什么意义,里面写或不写都是没问题的。因为函数传入进去的是指向数组的首地址的指针
    void print_arr( int a[], int len)//也可以写int* a
    {
    	cout<<"数组作为函数形参后退化为指针所占内存大小:"<< sizeof(a) <<endl;
    	for( int i = 0; i < len; i++)
    	{
    		cout<<a[i]<<" ";
    	}
    	cout<<endl;
    }
    int main()
    {
    	int a[5] = {1, 2, 3, 4, 5};
    	cout<<"数组所占内存大小: "<< sizeof(a) <<endl;
    	int n = sizeof(a)/sizeof(a[1]);
    	cout<<"数组长度: "<< n <<endl; 
    	
    	print_arr(a, n);
    	
    	return 0;
     } 
    
  2. 为数据类型起别名

    #include <iostream>
    
    using namespace std;
    //为类型取别名 
    typedef unsigned int u32;
    
    //typedef 一般与结构体一起用
    typedef struct stu
    {
    	int number;
    	int age;
    	char name;
    }mystruct;
    
    int main()
    {
    	u32 a;
    	
    	mystruct jack;
    	
    	return 0;
    }
    
  3. void , 无类型

    • 函数参数为空,定义函数时,可以用void修饰,int fun(void)

    • 函数没有返回值,必须用void修饰,void fun(int a)

    • 不能用void 定义普通变量,void a; //error, 因为无法确定类型,不同类型分配空间不一样

    • 可以定义void* 变量: void *p; //万能指针,指针变量内存确定,

    • 数据类型的本质,固定内存块大小别名

      int b[10];//b和&b不一样。 b: 首元素地址,+1 = +4字节; &b 整个数组首地址 +1 = +40字节
      
  4. 变量:本质是内存空间的别名
    必须通过数据类型定义变量。
    变量的三要素:名称、大小和作用域。还需要考虑变量的生命周期

  5. 内存四区

    • 全局区,存放全局变量,静态变量和字符串常量。子函数中的静态局部变量,作用域是子函数,但是生命周期是整个程序。整个程序运行完毕系统自动回收

      char* p = "abdsf";//字符串常量,存在全局区,程序结束后由操作系统释放
      
    • 栈区
      系统分配空间,系统自动回收,函数内部定义的变量,函数参数,函数结束,其内部变量生命周期结束
      地址生长方向:由上往下递减

    • 堆区
      程序员动态分配空间,由程序员手动释放,没有手动释放,分配空间一直可用。
      地址生长方向:有下往上递增

    • 代码区

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值