zoukankan      html  css  js  c++  java
  • 学习第38天

    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 ew分配、用freedelete来释放、
          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、


  • 相关阅读:
    uwsgi配置详解
    一文搞定SonarQube接入C#(.NET)代码质量分析
    推荐一款 Diffy:Twitter 的开源自动化测试工具
    推荐一款简单易用线上引流测试工具:GoReplay
    kanboard安装及使用
    性能相关博客
    性能工具之JMeter5.0核心类StandardJMeterEngine源码分析
    使用sshkey连接github等服务器
    [转]关于浏览器css选择器性能优化
    [转]你不淘汰自己,就会被别人淘汰
  • 原文地址:https://www.cnblogs.com/chengyaohui/p/13739193.html
Copyright © 2011-2022 走看看