笔记

1、size_t和ptrdiff_t

  size_t类型用于指明数组长度,它必须是一个正数;

  ptrdiff_t类型则应保证足以存放同一数组中两个指针之间的差距,它有可能是负数。

  所以size_t是unsigned类型,而ptrdiff_t是signed整型。例如:int *p1, *p2; ptrdiff_t n = p2 - p1;

 

2、C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

 

3、在使用下标访问数组时,实际上是对指向数组元素的指针做下标操作。只要指向数组元素,就可以对它进行操作。

例如:

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

int *p = &ia[2];

int j = p[1]; //(j=ia[3])

int k = p[-2]; //(k=ia[0])

 

4、const double *cptr;这里的cptr是一个指向double类型const对象的指针,const限定了cptr指针所指向的对象类型,而并非是cptr本身。也就是说,cptr本身并不是const。把一个const对象的地址赋给一个普通的、非const对象的指针也会导致编译时的错误。也不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址。但允许把非const对象的地址赋给指向const对象的指针。

 

5、除指向const对象的指针外,C++语言还提供了const指针——本身的值不能修改,如:int a = 1; int *const p = &a;p的值是不可改变的。与任何const量一样,const指针也必须在定义时初始化。

 

6、LPCTSTR用来表示你的字符是否使用unicode,如果你的程序定义了unicode或其他相关的宏,那么这个字符或字符串被作为unicode字符串,否则就是标准的ANSI字符串。L:表示long指针,是为了兼容操作系统的作用,没有实际意义。P:表示这是一个指针。C:表示这是一个常量。T:表示在Win32环境中,有一个_T宏。STR:表示这个变量是一个字符串。所以LPCTSTR就表示一个指向常量固定地址的可以根据一些宏定义改变语义的字符串。

LPCTSTR == const char *,CString和LPCTSTR可以说是通用,原因在于CString定义的自动类型转换。CString直接定义了一个类型转换函数LPCTSTR(),该函数直接返回所维护的字符串。

当你需要一个const char *而传入CString时,C++编译器自动调用CString重载的操作符LPCTSTR()来进行隐式类型转换。

当需要CString而传入了const char *时(char *也可),C++编译器则自动调用CString的构造函数来构造临时的CString对象。

例如:

CString cStr;

const char *lpctStr = (LPCTSTR)cStr;

LPCTSTR lpctStr; CString cStr = lpctStr;

 

7、位运算的运算数只能是整型或字符型数据,不能为实型数据。

 

8、C++强制类型转换

static_cast:编译器隐式执行的任何类型转换都可以由static_cast显示完成。我们常常使用static_cast取代由编译器实现的隐式转换.。例如:double d = 97.0; char ch = static_cast<char>(d);

const_cast:将const对象转换为相应的非const类型的强制转换。例如:const char *pc_str; char *pc = string_copy(const_cast<char *>(pc_str));

reinterpret_cast:将操作数内容解释为另一种不同的类型。这类强制转换本质上依赖于机器,而且是非常危险的。例如:int *pi; char *pc = reinterpret_cast<char *>(pi);

 

9、break语句用于结束最近的while、do while、for或switch语句,并将程序的执行权传递给紧接在被终止语句之后的语句。并且break只能出现在循环或switch结构中,或者出现在嵌套于循环或switch结构中的语句里。对于if语句,只有当它嵌套在switch或循环语句里面时,才能使用break。break出现在循环或switch外将会导致编译时错误。continue语句导致最近的循环语句的当次迭代提前结束。对于while和do while语句,继续求解循环条件。而对于for语句循环,程序流程接着求解for语句头中的expression表达式。

 

10、string.c_str()函数将一个string类型对象转化为const char *类型,函数返回当前字符串的首字符地址。如:const char *p = str.c_str();

1)string转CString:CString.Format("%s", string.c_str());

2)char *转string:string s(char *);

3)CString转string:string s(CString.GetBuffer()); GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间。

4)CString转char *:char *p = (LPSTR)(LPCTSTR)str;

 

11、函数模板与重载函数可以一起使用,在调用是约定:1)先寻找函数模板。2)如找不到相应的函数模板,则寻找重载函数。3)如再找不到重载函数,则进行强制类型转换。

 

12、CString str = "abcde\0fgh";输出字符串str的值为abcde,长度str.GetLength()的值为5,因为CString对象在赋值时检查到'\0'后的字符被忽略了,也就是说str实际内容为"abcde\0",str真正的存储空间为6。

转载于:https://www.cnblogs.com/dongshanzhishi/p/4280597.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值