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";
?
?对于指针有一下几种情况
??? 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
?
???????
