C++菜鸟常见错误整理(第四天)

来源:互联网 发布:网络类型选择只有2g 编辑:程序博客网 时间:2024/05/16 04:20

 本人目前还是学生,能力有限,有不足或者错误的地方欢迎大家指正,谢谢大家!

1、cctype 中的函数

   isalnum(c) 如果 c 是字母或数字,则为 True。
   isalpha(c) 如果 c 是字母,则为 true。
   iscntrl(c) 如果 c 是控制字符,则为 true
   isdigit(c) 如果 c 是数字,则为 true。
   isgraph(c) 如果 c 不是空格,但可打印,则为 true。
   islower(c) 如果 c 是小写字母,则为 true。
   isprint(c) 如果 c 是可打印的字符,则为 true。
   ispunct(c) 如果 c 是标点符号,则 true。
   isspace(c) 如果 c 是空白字符,则为 true。
   isupper(c) 如果 c 是大写字母,则 true。
   isxdigit(c) 如果是 c 十六进制数,则为 true。
   tolower(c) 如果 c 大写字母,返回其小写字母形式,否则直接返回 c。
   toupper(c) 如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。

2、指针地址 

   char *cp1 = "some value";   cp1=cp2;if (cp1 < cp2) 比较的是指针上存放的地址,并非他们指向的字符的值、

     如果 cp1 和 cp2 指向同一数组中的元素(或该数组的溢出位置),上述表达式等效于比较在 cp1 和 cp2 中存放的地址;如果这两个指针指向不同的数组,则该表达式实现的比较没有定义。

3、字符串的比较

    字符串的比较和比较结果的解释都须使用标准库函数 strcmp 进行:
   const char *cp1 = "A string example";

   const char *cp2 = "A different string";

   int i = strcmp(cp1, cp2);

    i = strcmp(cp2, cp1);
    i = strcmp(cp1, cp1);

标准库函数 strcmp 有 3 种可能的返回值:若两个字符串相等,则返回 0值;若第一个字符串大于第二个字符串,则返回正数,否则返回负数。

4、字符串要以null结束

     在使用处理 C 风格字符串的标准库函数时,牢记字符串必须以结束符 null结束:char ca[] = {'C', '+', '+'}; cout << strlen(ca) << endl;在这个例题中,ca 是一个没有 null 结束符

字符数组,则计算的结果不可预料。标准库函数 strlen 总是假定其参数字符串以 null 字符结束,当调用该标准库函数时,系统将会从实参 ca 指向的内存空间开始一直搜索结束

符,直到恰好遇到 null 为止。strlen 返回这一段内存空间中总共有多少个字符,无论如何这个数值不可能是正确使用C++标准库类型string,不会出现在字符串后面添加内容的问

题。

5、动态分配存储空间

   C 语言程序使用一对标准库函数malloc 和 free 在自由存储区中分配存储空间,而 C++ 语言则使用 new 和delete 表达式实现相同的功能。

6、动态数组的定义

   int *p=new int[10];在自由存储中创建的数组对象是没有名字的,只能通过其地址间接访问堆中的对象

   string *psa = new string[10]; // array of 10 empty strings已经初始化

   int *pia = new int[10]; // array of 10 uninitialized ints未初始化,可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化

   int *pia2 = new int[10] (); 圆括号要求编译器对数组做值初始化,在本例中即把数组元素都设置为0。

对于动态分配的数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。

const数组必须初始化const int *pci_ok = new const int[100]();//初始化全为零。  或者是类类型数组,默认的构造函数对其初始化

   今天就到这里,有不足的地方还请指正,谢谢大家!