`
tmj_159
  • 浏览: 700597 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

C++ 学习笔记 (基本语言)

 
阅读更多

第二篇 基本语言

 

1.文字常量

      当一个数值,1,出现在程序中时,它被称为文字常量,称之为“文字”是因为我们只能以它的值的形式指代它,称之为常量是因为它的值不能改变。每个文字常量都有相应的类型,如0,3.1415926。文字常量是不可以寻址的,尽管它的值存在内存的某个地方,但是我们没有办法访问它的地址。PS:其实就是JAVA中的常量。

 

2.命名风格

    对象名一般小写

    标识符用 有意义的名字

    多个词之间用下划线或者内嵌的每个词首字母大写(驼峰法)

 

3.指针

    指针持有另一个对象的地址,使我们能够间接的操作这个对象。

    每个指针都有一个相关的类型,不同数据类型的指针之间的区别不在指针的表示上,也不在指针所持有的值(地址)上,对所有类型的指针来说,他们是一样的。不同之处在于,指针所指的对象的类型上。指针的类型可以指示编译器怎样解释特定地址上内存的内容,以及该 内存区域应该跨越多少内存单元。

     当指针持有0值时,表示它没有指向任何对象。

     指针不能持有非地址值,并且不能被初始化或赋值其它类型的对象的地址。

     空类型指针(void*)可以被任何数据指针类型的地址赋值(函数指针不能赋值给它)

 

4.字符串

  C++ 提供了两种字符串表示:C风格的字符串和标准C++引入的string类类型。一般我们建议使用string类。

   C风格的字符串,字符串被存在一个字符数组中,一般通过一个char* 类型的指针来操纵它,标准C库为操纵C风格的字符串提供了一组函数。

   int strlen( const char*) //字符串长度

   int strcmp(const char*,const char*)//比较两个字符串是否相等

   char* strcpy(char* ,const char*) //字符串拷贝

   要使用这些函数我们必须要包含cstring 头文件

    #include <cstring>

    指向一个C风格的字符串指针总是指向一个关联的字符数组。即使当我们写一个字符串常量时,系统内部也会把字符串常量存在一个字符数组中。

const char* st="this is a test\n";

 

    string类型

    使用标准C++ 引入的string类型需要引入 string 头文件

    #include <string>

    string str="this is a test string";

 

5.const 用法

  const修饰变量或者指针,表示所修饰的变量或者指针不可变

 对于指针有一下几种情况

a.            const char *pContent;

b.            char* const pContent;

c.            char const *pContent;

d.           const char* const pContent;

   区别方法是:沿着* 划一竖线,如果const*的左边,则const用来修饰指针所指示的变量,即指针指向一个常量。如果const *的右侧,则const用来修饰指针本身,即指针本身是常量.

 

6.布尔类型

布尔类型的对象可以被赋值true或者false,例如

 bool b=false;

虽然布尔类型的对象也被看做是一种整数类型的对象,但是它不能声明为signed,unsigned,short或long。

   

7. 枚举类型

enum open_modes{input=1,output,append};

不能打印枚举成员的成员名,不能对枚举成员进行迭代。

 

8.  数组类型

     数组是一个单一数据类型对象的集合。

     定义一个数组

     int ia[10];

     int ia[]={1,2,3};

     const char ca[4]="c++"; //字符串最后有一个空白的终止空字符,所以长度是4

 

     一个数组不能被另外一个数组初始化,也不能被赋值给另外一个数组。

    int ia2[]=ia;// 错误,JAVA中可以

    为什么不可以,个人理解,因为 int *p=ia; 是可以的。单独的ia代表一个地址。

 

9.typedef

   typedef 机制为我们提供了一种通用的类型定义方法,可以用来为内置的或用户定义的数据类型引入助记符号。

   注意以下例子

    typedef char* mstring;

    extern const mstring cstr;

    上面定义了一个指向字符的const  指针,即 char* const cstr; 当在一句话中看不到指针的标识(*)时,即可以把它当做普通的类型,因此const是修饰cstr的,cstr 是一个指向字符的指针。

     不能理解为指向const字符的指针,即 const char* cstr;

 

10. volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未检测到的情况下被改变,因此编译器不能对引用这些对象的代码做优化处理。想想JAVA中的volatile的语意?

 

11.简单的类

class persion{

public:

string name();

int age();

private:

string _name;

int _age;

}

 

12 sizeof操作符的作用是返回一个对象或类型名的字节长度。返回值的类型是size_t, 这是一种和机器相关的typedef定义,我们可以在cstddef头文件中找到它的定义。

     当sizeof操作符应用在数组上时,返回整个数组的字节长度。

     当sizeof操作符应用在指向数组的指针上是,返回的是指向数组类型的字节长度。

     int *ap = ia;
    cout << "sizeof ia :" << sizeof(ia) << endl; //8
    cout << "sizeof *ap :" << sizeof(*ap) << endl; //4
    string sa[2];
    cout << "sizeof sa :" << sizeof(sa) << endl; //8
    double da[2];
    double *dp=da;
    cout << "sizeof da :" << sizeof(da) << endl; //16
    cout << "sizeof *dp :" << sizeof(dp) << endl; //4

  

13. new 和 delete

 动态内存分配由new表达式应用在一个类型上完成。new表达式返回指向新分配的对象的指针。

int *pi =new int(1024);

int *pa=new int[10];

int pa2[]=new int[10]; //错误, java中可以这样,C++不行,因为new出来的返回值都是地址。

当对象完成使命时,我们必须显示的把对象的内存还给空闲存储区,delete可以帮助我们完成。

delete pi;

delete pa;

 

14 类型转换

隐式转换:低精度到高精度

显示转换:也叫强制类型转化,包括以下强制类型转换符(static_cast,dynamic_cast,const_cast,reinterpret_cast)

       1) 任何非const数据类型的指针都可以赋值给void*类型的指针。

        int *pi=0;

        char *pc=0;

        void *pv;

         pv=pi;

         pv=pc;

 

         int ival;

        const int *pci=&ival;

        pv=pci; //错误

      

         2)void*类型的指针到特殊类型的指针之间不会自动转换,所以不能直接给指针赋一个void*类型的指针。此时需要强制转换。

       pi=pv;//错误

       pi=static_cast<int*>(pv);

 旧式强制类型转换

 前面给出的强制类型转换语法,是标准C++引入的,当我们为C语言或者C++标准之前的编译器编写代码时要用到旧式强制类型转换。标准C++支持旧式的强制类型转换方式。

//旧式C++强制类型转换方式

type (expr)

//旧式C强制类型转换方式

(type) expr

 

       

分享到:
评论

相关推荐

    C++语言 STL学习笔记.pdf

    《算法笔记》上C++的STL相关知识的整理,供大家参考。最近在准备PAT相关的考试,发现基本功还有所欠缺,所以系统学习了一些知识,这是部分,上传供大家参考。

    C++ Polymorphism 笔记 1

    欢迎来到我的个人C++学习笔记!这是我在学习C++编程语言过程中的记录和心得分享。我希望这些笔记能够帮助那些刚开始接触C++的新手们理解基本概念、语法规则以及编程技巧。 在这里,您会找到从基础语法到高级特性的...

    C++机器学习笔记.md

    内容概要: 本文介绍了使用C++编程语言实现机器学习算法的方法,包括线性回归、决策树和支持向量机(SVM)。每个算法都配有代码示例,详细展示了实现过程和关键思想。此外,文章还提供了两个示例,分别展示了如何...

    c++语言最详细入门0基础学习笔记.pdf

    c++语言最详细入门0基础学习笔记,只要掌握基本c语言知识就可入门,章节层次清晰,语法及示例全面地讲解

    Qt基础学习笔记

    2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、...

    linux 编程环境学习笔记,含 linux 基本命令,linux 操作系统,linux 下 C++ 编程等.zip

    软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...

    python语言学习笔记.pdf

    适合了解c或者c++语言的入门python学习,章节层次清晰地全面讲解语法知识,系统性梳理了各种语法和示例,学完基本可以入门

    Linux系统设计-linux 编程环境学习笔记,含 linux 基本命令,linux 操作系统,linux 下 C++ 编程等

    Linux系统在科学计算、数据分析和机器学习等领域也有广泛应用。许多知名的科学计算软件都在Linux上开发和运行,Linux系统在各个领域都有广泛的应用,其强大的功能和灵活性使得它成为许多产品和服务的基础架构。

    程序员最需要的精品学习笔记.zip

    最权威、最专业的IT程序员入门大全学习笔记,涵盖数据结构、网络、编程语言(C\C++\PYTHON\JAVA)、学习等诸多资源,绝对物超所值!!!

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

    Python学习笔记+入门基础教程+语法总结+进阶版合集完整版

    Python学习笔记,根据作者学习编程的经验和体会整理而成,手把手教你学Python。基于最新的Python版本,零基础带你搭建开发环境,从无到有、从易到难、层层递进,逐步走进Python的世界。既有详细的知识点介绍,又有...

    C++编程的核心.md

    是笔者学习C++所积累下的笔记,希望对大家学习有所帮助,c++编程语言升级到目前最新的C++20,已经变得非常的庞大复杂了。但是核心内容从C++98基本就固定下来了,从C++11到20最大的变化还是在标准库方面。这里是一份...

    Matlab学习笔记.rar

    MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个...

    Go+学习笔记 超清版

    很难得的GO语言知识点分析文档,超级详细,本人是在走路的过程中读完第一遍的,吸引力堪比C++中的《windows核心编程》。 从基本类型到高级特性到源码分析,值得反复阅读借鉴。 只能说 it's professional, really ...

    基于PyQt5实现的邮件拦截系统、视频播放器、以及pyqt5的学习笔记.zip

    用c++/qt写的项目,项目都经测试过,真实可靠,可供自己学习c++/qt。Qt是一个用标准C++编写的跨平台开发类库,它对标准C++进行了扩展,引入了元对象系统、信号与槽、属性等特性,使应用程序的开发变得更高效。 Qt...

    Java学习笔记

    1、开发语言基本包括:数据类型、循环控制语句、数组、方法 2、面向对象:最终是面向接口编程的,封装、继承、多态、设计模式、异常、包 3、JAVA应用开发部分:JAVA类集、JAVA IO、JDBC; 概念和原理方面:线程、...

    《B站-青岛大学-王卓老师-数据结构与算法基础》自学心得、笔记(C++语言实现).zip

    数据结构是计算机存储、组织数据的方式,它涉及到数据的逻辑结构、物理结构以及对数据的基本操作。数据结构的选择会影响到程序的效率、可读性和可维护性。常见的数据结构有数组、链表、栈、队列、树、图等。 算法则...

    Python学习笔记(二)基础语法

    (开发环境依然是Python2.7,简单使用)一,基本知识1,不需要预先定义数据类型(此说法值得商榷,姑且这么说吧),这是与其他语言的最大不同(如C,C++,C#,Delphi等) 复制代码 代码如下: &gt;&gt;&gt; x=12 &gt;&gt;&gt; y=13 &gt;&gt;&gt;...

    leetcode中国-AlgorithmNote:田野光的算法学习笔记

    算法学习笔记 书单 进度:68/68 其它目录 感悟 大家知道我并非科班出身,算法方面一直是我的薄弱之向,两面微软电面,很简单的题目被裸面的我写的一塌糊涂。 面试中手写算法题考察的其实是三个方面,『数据结构』,...

    里面node以及mongodb数据库学习的一些笔记和练习.zip

    mongoDB是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。它介于关系数据库和非关系数据库之间,被认为是非关系数据库当中功能最丰富,最像关系数据库的...

Global site tag (gtag.js) - Google Analytics