C++ Primer(第四 五 六章)

数组与指针

  1. 数组 vs vector:数组长度固定 且不知道数组长度;数组不能直接复制或者赋值 vector可以
  2. 字符数组特殊性:char chr1[3]={‘c‘,‘+‘,‘+‘};char chr2[4]="c++";后者会在最后方式放上null字符,表示字符数组结束,需要比字符数量+1个长度
  3. 数组下标索引:下标类型是size_t(unsigned整型 足够大)   指针索引:类似vector中迭代器索引
  4. 应该尽量避免使用数组和指针 容易出错 c++中应该多用vector 迭代器 string等来代替
  5. 指针:string *str; 与 string* str;二者均可,通常使用前者,string *str1, *str2(二者都是指针); srting* str1,str2(让人误以为二者都是指针 实际上只有str1是的);
  6. 指针:一定要初始化,在指向对象还没有建立的时候可以初始为0/NULL, NULL是从C语言中继承来的,是预处理变量,编译时处理为0,NULL并不是std空间的 不需要std::NULL
  7. void *指针:特殊性 可保存任何类型对象的地址,但不能用来操纵它指向的对象
  8. 指针引用区别:引用必须初始化 且只指向一个对象  赋值操作的意义不同
  9. 表达式中使用数组名会自动转化为指向数组第一个元素的指针
  10. 指针相减得到数据类型为 ptrdiff_t(signed整型 足够大)
  11. const指针 指向const对象的指针 指向const对象的const指针

    const int *a;//对象为const 指针可另外指向 但是不能通过指针来修改对象的值
    int *const a;//指针为const 指针指向不能修改 指向对象的值可以修改
    const int *const a;//指向const对象的const指针
    const int i=1;
    int *p=&i;//error 不能把一个const对象的地址  赋值给一个普通的 指向非const对象的指针
    void *p=&i;//error
    const int*p=&i;//ok
    const void *p=&i;//ok
    //pstring是字符串指针 const修饰pstring 修饰的是一个指针 因此是常量指针 而不应该按照字面扩展来理解
    typedef string *pstring;
    const pstring cstr;//cstr是string *const类型 下述三种表达是相同的意思string *const sctr;pstring const sctr;
  12. 动态数组:动态数组 在运行时才决定数组长度  堆空间用于存储动态分配的对象 new delete实现 需要delete释放空间才可以 string *str=new string[n]();delete [] str;
  13. 新旧代码的兼容:string中所有使用字符串字面值的地方都可以使用c风格的字符串代替 反之 不行;使用数组初始化vector;

    char *chr=str;//error
    const char *chr=str.c_str();//返回的是const指针 防止chr指针修改str对象
    int arr[]={0,1,2,3,4,5};
    vector<int> ivec(arr,arr+6);//用数组初始化vector 放入第一个元素和最后一个元素的指针
  14. 多维数组:即数组的数组 并没有实际上的多维数组 row行 column列

    int ia[3][4];
    int (*ip)[4]=ia;//ip指针指向 int[4]一个指向4个元素的数组的指针 最多可以ip+2为止
    ip=&ia[2];
    int *ip[4];//长度为四的数组 数组元素类型为int*   
    
    typedef int int_array[4];//typedef 简化多维数组的指针
    int_array *ip=ia;

c风格字符串

  1. C++支持c风格的字符串 但是不应该在c++中用 容易带来大量安全问题
  2. 字符串字面值的类型是const char类型的数组
  3. c风格字符串 不是C语言类型 也不是c++类型 是以空字符结束的字符数组 char chr[]={‘c‘,‘+‘,‘+‘,‘\0‘};char chr[]="C++";char *chr="C++";均是c风格字符串。若不加null 则不是。(const) char*来操作c风格字符串  标准库cstring是c++中包含处理出风格字符的标准库(与string.h c中字符串库内容相同)
  4. 数组需要告知其长度 否则无法自己获取其长度;  字符数组在没有加空字符的情况下也不知道数组长度  但c风格字符串可以通过空字符遍历来获取长度  因此c风格字符串是有对应函数可以调用; 需要注意 输入s为非零有空字符的字符串  且目标字符串需要有足够大的空间;strn开头的函数是比strcpy strcat安全,能够控制复制字符的个数

    strlen(s);//返回长度 不包含空字符
    strcmp(s1,s2);//相等返回0 s1>s2 返回正数 否则返回负数
    strcat(s1,s2);//拼接到s1 并返回s1
    strcpy(s1,s2);//拷贝给s1
    strncat(s1,s2,n);//将s2的前n个字符拼接到s1
    strncpy(s1,s2,n);//将s2的前n个字符拷贝到s1
时间: 2024-08-25 07:58:53

C++ Primer(第四 五 六章)的相关文章

第四十六章

第四十六章1 马应该种田,不应该打仗:你应该工作,不应该总想买买买 天下有道,却走马以粪.天下无道,戎马生于郊. 天下有道的时候,马都在田里耕地,天下无道的时候,马都在战场打仗. 要放低欲望,把资源用在正地方. 各位朋友大家好,清晨起来,我们接着来讲<道德经>,看看老子老先生带给我们什么样人生启发.我在今天起床之前做梦,梦是让人黯然神伤的,我做梦梦见自己给一帮孩子妈妈,带着小朋友讲课,就讲这个“道”,结果妈妈不听,在下面聊天,孩子哭闹,乱作一团,大家说讲点感冒吧,讲“道”有什么用,我说“道”很

“全栈2019”Java多线程第四十六章:判断任意线程是否已持有写锁

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第四十六章:判断任意线程是否已持有写锁 下一章 "全栈2019"Java多线程第四十七章:判断锁是否为公平锁isFair() 学习小组 加入同步学习小组,共同交流与进步. 方式一:加入编程圈子. 方式二:关注头条号Gorhaf,私信"Java学习小组". 方式三:关

构建之法第五六章读后感

邹欣老师的这本书,写得形象生动,第五章用体育运动等团队例子引出软件开发团队的形式.软件团队形式多样,适用于不同的人员与需求.团队可能会演变的模式有:主治医师模式.明星模式.社区模式.业余剧团模式.秘密团队.特工团队.交响乐团模式.爵士乐模式.功能团队模式.官僚模式等.开发流程模式有:瀑布模式.瀑布模型的各种变形.统一流程.老板驱动的流程.渐进交付的流程等.在过去的学习生活很少有团队合作的时候,看了本章很期待后续与大家团队合作,肯定会遇到很多困难,但只有把学到的运用到实际,知识才会学得更牢靠. 看

【WPF学习】第四十六章 效果

WPF提供了可应用于任何元素的可视化效果.效果的目标是提供一种简单的声明式方法,从而改进文本.图像.按钮以及其他控件的外观.不是编写自己的绘图代码,而是使用某个继承自Effect的类(位于System.Windows.Media.Effects名称空间中)以立即获得诸如模糊.辉光以及阴影等效果. 下表列出了可供使用的的效果类: 表 效果类 勿将上表列出的Effect类的派生类和位图效果类相混淆,位图效果派生类自BitmapEffect类,该类和Effect类位于相同的名称空间中.尽管位图效果具有

第五六周机电传动控制作业

到西门子.ABB.施耐德或其他公司的官网上,选择4款或以上低压电器产品(如接触器.断路器.热继电器等),阅读技术数据,并简要列出主要额定参数 西门子: SIRIUS(国产)3RV6/3RV5 接触器: 3RV6/3RV5 断路器包括 4 种规格:S00 规格.S0 规格.S2 规格.S3 规格 最大额定电流 从16A到100 A逐渐增大.交流 400 V 时适用感应电动机最大 7.5 kW到最大 45 kW.额定电压根据 IEC标准为690V,根据 UL/CSA标准为600V. SIRIUS(国

第四、五、六章,连续大更(3000字)

第四章 雪儿  “救命,救命.”星霆睁开眼睛,看在一个大森林里有一群约20岁的男人,在强暴一个和星霆年龄相仿的少女.星霆二话不说,提起自己比赛用的长剑,向男人刺去.“哈,小孩子,别坏了我的好事.”那人露出猥琐的脸.提起手中的巨斧,朝星霆砍去.“暗影突袭.”星霆大喊.一秒钟后,星霆还在原位,而那几个人都倒地了.因为星霆用的是比赛用剑,剑不够尖.几名男人只是受了伤,落荒而逃.星霆用的是他最自豪的技能之一,他运用自己身体的重心,加上自己那神乎其技的出剑速度,已经把这个技能练得炉火纯青了.  少女颤颤微

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性:

C++ Primer【第五版】习题参考答案——第六章(函数)

本系列文章会不断更新,但是时间不能保证.另外基本上都是自己做的答案,仅供参考,如果有疑问欢迎交流. #include <iostream> #include <initializer_list> using namespace std; int test_Ex_6_27(std::initializer_list<int> li); int main() { cout << test_Ex_6_27({23,78,89,76,90}) << en

阅读笔记3——《大道至简》第四、五、六章

“流于形式的沟通,可能是使得你的项目被不断推翻和不断延迟的最直接原因”,这是第四章的最后一句话,是我印象最深刻的一句话. 当我们在与客户交流时,要用客户能懂得方式,并且要保障每一次沟通的有效性,求道于盲是没有错误的,错误的是你睁着眼睛.现在很多公司和客户谈项目时总喜欢去吃饭,吃饭是没有错误的,但最终的结果大多是以酒醉收场.所以就需要最有效的沟通方式来减少各方面的损失,而这个最有效的方式则是通过各方面考究查询得知的.除此之外,我们在做项目时,要记得留下整个项目的历史记录,例如,在需求阶段,与谁联系