C++primer学习笔记第四章-数组与指针
2016-10-23 13:27
288 查看
一、数组
1.数组的长度是固定,指的是一旦初始化就不能改变,相比vector是缺陷,但是速度更快;
2.初始化数组时,维数一定要是整型字面值常量、枚举常量或者const对象;如果没有显示初始化,则在函数体外默认初始化,函数体内不自动初始化;如果是类类型,则调用默认构造函数;
3.不允许数组直接复制和赋值,与vector不同;
4.数组下标类型是size_t;
二、指针
1.声明:int *p1;
2.避免使用未初始化的指针,如果要分开定义指针和指向的对象,则将指针初始化为0,表示不指向任何对象;
3.指针和下标:int a[]={0,2,4,6,8}; int *p=&a[2];
则int j=p[1];//p[1]相当于*(p+1),a[3],6
,相当于解引用
int k=p[-2];//k相当于0
4.指向const对象的指针:const double *p;p指针可以改变指向,但不能改变指向的对象,因为对象为const,不需要进行初始化。
Const指针:int i=0; int const* p =&i;必须初始化,不能改变指向。
5.在 typedef中使用指针往往会带来意外的结果。下面是一个几乎所有人刚开始时都会答错的问题。假设给出以下语句:
typedef string *pstring;
const pstring cstr;
请问 cstr 变量是什么类型?简单的回答是
const pstring 类型的指针。进一步问:const pstring
指针所表示的真实类型是什么?很多人都认为真正的类型是: const string *cstr;
也就是说,const pstring
是一种指针,指向 string
类型的 const
对象,但这是错误的。错误的原因在于将 typedef
当做文本扩展了。声明 const pstring
时,const
修饰的是 pstring
的类型,这是一个指针。因此,该声明语句应该是把 cstr
定义为指向 string
类型对象的 const
指针,这个定义等价于: string *const cstr。
string s;
typedef string *pstring;
const pstring cstr1 = &s; // written this way the type is obscured
pstring const cstr2 = &s; // all three decreations are the same type
string *const cstr3 = &s; // they're all const pointers to string
【const有向右结合性,优先修饰右边的元素】
三、C风格字符串
1.标准库函数,首先引入头文件 #include<cstring>
strlen(s) ;返回s的长度,不包括字符串结束符null;注意:函数是以Null作为结束符。
对于char风格的:char ca1[]={‘C’,’+’,’-’};这里末尾没有null,最好别用
char ca2[]=”C+-”;系统末尾自动添加Null
2.动态数组:动态分配的数组不必再编译时知道其长度,可以在运行时才确定数组的长度。与数组变量不同,动态数组将一直存在,知道程序显式释放它为止。
C语言中使用一对标准库函数malloc和free在自由存储区中分配存储空间,C++使用new和delete
3.动态数组的定义只需指定类型和数组长度,不必为数组对象命名;
int *pia=new int[10];//返回指向新分配数组的第一个元素的指针。
且动态数组的初始化只能是元素类型的默认值,类类型为默认构造函数,内置类型无初始化。
内置类型可以通过 int *pia =new int[10]();//初始化为0
注意:用New动态创建长度为0的数组是合法的,但如果是数组变量就不行;
4.动态空间的释放: delete [] pia; // []表示是数组而非单个对象
5.const char *str=st2.c_str(); //c_str()返回指针指向C风格字符串的const char类型的数组,并且以null结束符
四、多维数组
1.int ia[3][4]={{0},{4},{8}};只初始化了每行的第一个元素,其他的函数体内默认初始化为0,函数体外没有初始化。
2.多维数组其实就是数组的数组,因此它的指针,应该是指向第一个内层数组的指针。
int ia[3][4];Int (*p)[4]=ia;ip=&ia[2];
1.数组的长度是固定,指的是一旦初始化就不能改变,相比vector是缺陷,但是速度更快;
2.初始化数组时,维数一定要是整型字面值常量、枚举常量或者const对象;如果没有显示初始化,则在函数体外默认初始化,函数体内不自动初始化;如果是类类型,则调用默认构造函数;
3.不允许数组直接复制和赋值,与vector不同;
4.数组下标类型是size_t;
二、指针
1.声明:int *p1;
2.避免使用未初始化的指针,如果要分开定义指针和指向的对象,则将指针初始化为0,表示不指向任何对象;
3.指针和下标:int a[]={0,2,4,6,8}; int *p=&a[2];
则int j=p[1];//p[1]相当于*(p+1),a[3],6
,相当于解引用
int k=p[-2];//k相当于0
4.指向const对象的指针:const double *p;p指针可以改变指向,但不能改变指向的对象,因为对象为const,不需要进行初始化。
Const指针:int i=0; int const* p =&i;必须初始化,不能改变指向。
5.在 typedef中使用指针往往会带来意外的结果。下面是一个几乎所有人刚开始时都会答错的问题。假设给出以下语句:
typedef string *pstring;
const pstring cstr;
请问 cstr 变量是什么类型?简单的回答是
const pstring 类型的指针。进一步问:const pstring
指针所表示的真实类型是什么?很多人都认为真正的类型是: const string *cstr;
也就是说,const pstring
是一种指针,指向 string
类型的 const
对象,但这是错误的。错误的原因在于将 typedef
当做文本扩展了。声明 const pstring
时,const
修饰的是 pstring
的类型,这是一个指针。因此,该声明语句应该是把 cstr
定义为指向 string
类型对象的 const
指针,这个定义等价于: string *const cstr。
string s;
typedef string *pstring;
const pstring cstr1 = &s; // written this way the type is obscured
pstring const cstr2 = &s; // all three decreations are the same type
string *const cstr3 = &s; // they're all const pointers to string
【const有向右结合性,优先修饰右边的元素】
三、C风格字符串
1.标准库函数,首先引入头文件 #include<cstring>
strlen(s) ;返回s的长度,不包括字符串结束符null;注意:函数是以Null作为结束符。
对于char风格的:char ca1[]={‘C’,’+’,’-’};这里末尾没有null,最好别用
char ca2[]=”C+-”;系统末尾自动添加Null
2.动态数组:动态分配的数组不必再编译时知道其长度,可以在运行时才确定数组的长度。与数组变量不同,动态数组将一直存在,知道程序显式释放它为止。
C语言中使用一对标准库函数malloc和free在自由存储区中分配存储空间,C++使用new和delete
3.动态数组的定义只需指定类型和数组长度,不必为数组对象命名;
int *pia=new int[10];//返回指向新分配数组的第一个元素的指针。
且动态数组的初始化只能是元素类型的默认值,类类型为默认构造函数,内置类型无初始化。
内置类型可以通过 int *pia =new int[10]();//初始化为0
注意:用New动态创建长度为0的数组是合法的,但如果是数组变量就不行;
4.动态空间的释放: delete [] pia; // []表示是数组而非单个对象
5.const char *str=st2.c_str(); //c_str()返回指针指向C风格字符串的const char类型的数组,并且以null结束符
四、多维数组
1.int ia[3][4]={{0},{4},{8}};只初始化了每行的第一个元素,其他的函数体内默认初始化为0,函数体外没有初始化。
2.多维数组其实就是数组的数组,因此它的指针,应该是指向第一个内层数组的指针。
int ia[3][4];Int (*p)[4]=ia;ip=&ia[2];
相关文章推荐
- C++Primer学习笔记第四章(4/18) 数组和指针
- 第四章 数组,字符串和指针
- 第四章 数组和指针
- 第四章 []运算符的本质 [置顶] 第四章 []运算符的本质 分类: 数组与指针的艺术 2009-11-23 10:59 8972人阅读 评论(28) 收藏 举报 bufferinteger编译器o
- C总结-第四章 指针数组(4/6)
- 《c++ primer》学习笔记 第四章 数组与指针
- C++ primer 第四章--数组和指针
- 【重学《C++Primer第四版》】第四章、数组和指针
- C++primer第四章(二):数组和指针——指针
- C专家编程学习之第四章 数组和指针
- C++Primer笔记3(第四章-数组和指针)
- C++Primer (第四版) 第四章 数组和指针
- 数组和指针 - 1【C++ Primer 学习笔记 - 第四章】
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
- C++ Primer 第四章 数组和指针
- C++ Primer 【第四版】第四章 数组和指针
- 第四章 数组和指针 (part2) 引入指针
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
- 第四章 数组和指针
- 第四章作业:4.17:建立一个对象数组,内放6个学生的数据(学号,成绩),用指针向数组首元素,输出第2,4,6个学生的数据。