码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Primer(第四 五 六章)

时间:2014-12-12 11:35:32      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   使用   sp   on   数据   div   

数组与指针

  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

     

C++ Primer(第四 五 六章)

标签:style   blog   ar   color   使用   sp   on   数据   div   

原文地址:http://www.cnblogs.com/oudan/p/4158649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!