C++ Primer 学习笔记(七) ---- 第四章 数组和指针(2)

一、知识点
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直接赋值,可以用&zero
pi = 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;


 

posted on 2012-08-01 22:42 tiger7 阅读(131) 评论(0)  编辑 收藏 引用 所属分类: C++ Primer


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

welcome to tiger's blog.

常用链接

留言簿

文章分类

文章档案

搜索

最新评论