C++语言

  1. 范围for语句、

    1. 用于遍历一个序列、

      1. int	a[]{ 1,2,4,6,9 };
          	for (auto b : a)//将数值a的元素依次拷贝到b里面、
          	{
          		cout << b << endl;
          	}
          	int	a[]{ 1,2,4,6,9 };
          	for (auto &b : a)//添加&可以省去拷贝的动作、
          	{
          		cout << b << endl;
          	}
        
  2. 动态内存分配问题、

    1. 供程序使用的存储空间、

    2. C语言分3个区域、

      1. 程序区、
      2. 静态存储区、
      3. 动态存储区、
    3. C++分为5个区域、

      1. 栈 、一般函数内的局部变量存储区域、由编译器自动分配和释放、
      2. 堆 程序员使用malloc\new分配、用free\delete来释放、
        1. 忘记释放后系统会回收、系统执行完程序后回收、
        2. 全局、静态存储区域、、释放全局变量和静态变量static,
        3. 程序结束时会释放常
      3. 变量存储区
      4. 常量存储的区域
      5. 程序代码区、
    4. 堆和栈的区别、

      1. 栈、
        1. 空间有限、大小由系统规定空间、
        2. 自动分配、
      2. 堆、
        1. 只要不超实际物理内存且不超系统允许的最大内存之内都可以分配、
    5. malloc和feee

      1. 在C语言中使用malloc和free来分配和释放内存、malloc和free是函数;

      2. int* a = NULL;
        	a = (int *)malloc(sizeof(int));
        
        	if (a != NULL);
        	{
        		cout << "分配成功" << endl;
        		*a = 4;
        		cout << *a << endl;
        		free(a);//释放内存,
        	
        	}
        
        
      3. malloc——动态内存分配、是函数就会有在末尾有括号、括号内容是形参、

      4. strcpy 拷贝内存是直接拷贝、不管大小、如果溢出则只保留未溢出部分、溢出部分不保留、同时会覆盖其它内存内容、

      5. strcpy_s则不会出现此错误、strcpy_s未了弥补strcpy的错误需要设置两个参数、第二参数是限制字符串大小字节、超过限制的字节则会报错、trcpy_s(a,10,"要拷贝的内容")、将要拷贝的内容拷贝到a里面、而10则是限制的字节数、也就是往a里面拷贝的内容不能超过10个字节否则会报错、本次字符串内容超过10个字节、

      char* a = NULL;
      	a = (char *)malloc(50*sizeof(int));//分配50个字节
      
      	if (a != NULL);
      	{
      		/*cout << "分配成功" << endl;
      		*a = 10;*/
      		strcpy_s(a, 40," 拷贝的内容");
      		cout << a << endl;
      		free(a);//释放内存,
      	}
      
      
    6. new和delete 是运算符(标识符)而非函数、

      1. C++语言中使用、也是在编译阶段执行、

      2. nwe和delete不仅和malloc和free的用途一样还会调用对象的构造函数、

      3. 三种格式、

        1. 指针变量名 =new类型标识符;

          1. int* a = new int;
            	if (a != NULL);
            	{
            		*a = 1;
            		cout << *a << endl;
            		delete a;
            	}	
            
        2. 指针变量名 =new类型标识符(初始值);表示初始值、

          1.   
            int* a = new int(10);
                 	if (a != NULL);
                 	{
                 		/**a = 1;*/
                 		cout << *a << endl;
                 		delete a;}	
            
        3. 指针变量名 =new类型标识符[内存单元 ];表示数组

          1.   
            int* a = new int[10];//整型数组
                 	if (a != NULL);
                 	{
                 		int* b = a;
                 		*b++ = 10;//数组第一个值是10  a[0]  10
                 		*b++ = 15;//数组第二个值是15  a[1]  15
                 		*a = 1;
                 		cout << *a << endl;
                 		cout << *(a+1) << endl;
                 		delete[] a;//释放数组空间、
              	}	
              
            
        4. 不要重复调用free和delete、第一使用是释放本次malloc和new的内存、重复使用时则不知道释放的时谁的内存、

        5. 有malloc必有free、有new必有delete、

  3. nullptr、

    1. C++11的新关键字、代表空指针、和null一样、但是null可以当成整型0使用、而cullptr则不可以、

    2. nullptr避免指针与整型相混淆、

    3. cout << typeid(NULL).name() << endl;
          	cout << typeid(nullptr).name() << endl;
      不同的类型、
      
      
    4. 对于指针的初始化中、和与指针有关的情况下尽量使用nullptr来替代null、


posted on 2020-09-27 14:10  程耀辉  阅读(124)  评论(0编辑  收藏  举报