一、知识点1、数组2、指针的引入3、C风格字符串4、多维数组二、要点 2、指针的引入 (1)、指针初始化和赋值操作的约束: 不能把int型变量赋给指针,但是可以吧数值0或在编译时可获得0值的const量赋给指针: int ival;int zero = 0;const int c_ival = 0;int *pi = ival; // 错误:pi = zero; // 错误:不能使用int直接赋值,可以用&zeropi = c_ival; // 正确pi = 0; // 正确 void*指针:可以保存任何类型对象的指针;但是不允许使用void*指针操作它所指向的对象。 (2)、指针和引用 引用总是指向某个对象,定义引用时没有初始化是错误的;指针定义时可以不用初始化 给引用赋值修改的是该引用所关联的对象的值;指针就修改了指针的值 int ival = 1024, ival2 = 2048;int *pi = &ival, *pi2 = &ival2;pi = pi2; // 这里就修改pi指向的对象是pi2,而不在是pi了。int &ri = ival, &ri2 = ival2;ri = ri2; // 这里修改的就是ival的值了,使ival的值为2048 (3)、指针的操作 ptrdiff_t:表示2个指针减法操作的结果; ptrdiff_t和size_t的区别:size_t是unsigned类型,ptrdiff_t是signed类型的。 C++允许计算数组对象的超出末端的地址,但是不允许对改地址进行解引用。 (4)、指针和const 【1】、指向const对象的指针:const double *cptr C++强制要求指向const对象的指针也必须具有const特性,即把一个const对象的地址赋给一个普通的、非cosnt对象的指针会导致编译错误; const限定了cptr指针所指的对象是const,而不是cptr本身,即可以给cptr重新赋值,但是不能通过cptr修改其指对象的值; 不能使用void*指针保存const对象的地址,必须用const void*; 允许把非const对象的地址赋值给指向const对象的指针,但是反过来不行(即第一点说的);但这时还是不能通过指针修改其指对象的值。 double dval = 3.14;const double pi = 3.14;double *pi = π // 错误:不能把const对象赋给非const指针const double *cptr = π // 正确*cptr = 3.1415; // 错误:不能通过cosnt指针修改所指对象的值cptr = &dval; // 正确:可以用非const对象给const指针赋值*cptr = 3.1415; // 错误:虽然这时指向了非const对象,但还是不能这样修改对象的值 【2】、const指针:double *const cptr 这个指针就是说明指针本身是不能修改的,即它不能使const指针再指向其他对象;正因为这样,所以const指针必须在定义时初始化(和const变量一样)。 【3】、指向const对象的const指针:const double *const pi_ptr 这个指针即不能修改它指向对象的值,也不能修改该指针的指向(即它的地址)。 (5)、指针和typedef typedef string *pstring;const pstring cstr;// 声明const pstring时,const修饰的是pstring的类型,而pstring这是一个指针,所以这里cstr是一个const的指针,指向string,等价于下面:string *const cstr;
一、知识点1、数组2、指针的引入3、C风格字符串4、多维数组二、要点 2、指针的引入 (1)、指针初始化和赋值操作的约束: 不能把int型变量赋给指针,但是可以吧数值0或在编译时可获得0值的const量赋给指针:
void*指针:可以保存任何类型对象的指针;但是不允许使用void*指针操作它所指向的对象。 (2)、指针和引用 引用总是指向某个对象,定义引用时没有初始化是错误的;指针定义时可以不用初始化 给引用赋值修改的是该引用所关联的对象的值;指针就修改了指针的值
(3)、指针的操作 ptrdiff_t:表示2个指针减法操作的结果; ptrdiff_t和size_t的区别:size_t是unsigned类型,ptrdiff_t是signed类型的。 C++允许计算数组对象的超出末端的地址,但是不允许对改地址进行解引用。 (4)、指针和const 【1】、指向const对象的指针:const double *cptr C++强制要求指向const对象的指针也必须具有const特性,即把一个const对象的地址赋给一个普通的、非cosnt对象的指针会导致编译错误; const限定了cptr指针所指的对象是const,而不是cptr本身,即可以给cptr重新赋值,但是不能通过cptr修改其指对象的值; 不能使用void*指针保存const对象的地址,必须用const void*; 允许把非const对象的地址赋值给指向const对象的指针,但是反过来不行(即第一点说的);但这时还是不能通过指针修改其指对象的值。
【2】、const指针:double *const cptr 这个指针就是说明指针本身是不能修改的,即它不能使const指针再指向其他对象;正因为这样,所以const指针必须在定义时初始化(和const变量一样)。 【3】、指向const对象的const指针:const double *const pi_ptr 这个指针即不能修改它指向对象的值,也不能修改该指针的指向(即它的地址)。 (5)、指针和typedef
posted on 2012-08-01 22:42 tiger7 阅读(131) 评论(0) 编辑 收藏 引用 所属分类: C++ Primer
Powered by: C++博客 Copyright © tiger7