C中的指针(1)

1.指针常量和常量指针

(1)char const *p;   const char *p;   此二者等价。

当指针符号*在const之后时,p是一个指向整形常量的指针,指针指向的是一个常量,该常量的值不能被改变,但是可以修改指针的指向。

const char *p=”abcd”;

p=”hello”       //改变了该指针的指向,合法

p[1]=’c’;        //修改指针指向的内容,不合法

(2)char *const p;  

指针符号*在const之前,p是一个指向整形的常量指针,指针指向的值可以改变,但是指针本身是常量,所以指针的指向不能改变。

char *const p=”abcd”;

p=”hello”;      //改变了该指针的指向,不合法

p[1]=’c’;        //修改指针指向的内容,合法

(3)char const *const p;    //指向常量的常量指针,既不能改变指针的指向,又不能修改指针指向的内容。

 2. 指针数组/数组指针  指针函数/函数指针

   int *p[10]     是一个指针数组,数组有10个元素,数组成员是指向整形的指针。(因为[]优先级高于*)

   int(*p)[10]    代表一个指向整型数组的指针。

   int*f()       f是一个函数,返回一个指向int的指针。

   int(*f)()      f是一个指针,指向一个返回int的函数。

   int*(*f)()     f是一个指针,指向一个返回int型类型指针的函数。

   int (**d)[10]     d是一个二级指针,指向一个一维数组的指针,数组元素是int型的。

   double *(*g)[10]  g是一个指针,指向一个一维数组,数组元素是double*类型。

   double(*f[10])()   f是一个数组,f有十个元素,元素都是函数的指针,指向的函数类型没有参数,返回double型值。

    int(*(*f)(int,int))(int)  f是一个函数的指针,指向的函数类型是由两个int型参数并且返回一个指针函数的函数。返回的指针函数指向有一个int参数且返回int值的函数。

 3.C++中的迭代器

const迭代器:迭代器不能指向其它的元素,但是迭代器指向的元素值可以改变。

const_iterator: 迭代器访问的对象是常量,指向的对象不能修改。但是可以改变迭代器的指向。

 4.引用和指针区别

     (1)非空区别。引用是对象的别名,定义引用时必须要初始化。但是可以定义一个空指针。

     (2)可修改区别。给引用赋值修改的是该引用所关联的对象值,且引用初始化后就始终指向一个特定的对象。给指针对象赋值修改的指针对象的本身,指针对象可以指向其它对象。

     (3)合法性区别。使用引用前不用检查它的合法性,使用指针变量需要检查合法性。

 5. 迷途指针/野指针的成因

   (1)指针变量没有初始化。

   (2)对一个指针进行delete操作后,没有把它置为空。这时候指针会指向不可用的内存。

 6. 指针使用时需要注意的问题

     (1)指针变量声明时最好初始化。(指针创建时不会自动生成NULL指针,它的缺省值是随机的。)

     (2)指针的加减运算移动的是指针所指类型的大小。

     (3)malloc new为指针分配空间后应该判断内存分配是否成功,并对新分配的内存初始化。

     (4)如果指针指向的是一块动态分配的内存,那么指针在使用完后需要释放内存,做到谁分配谁释放,防止内存泄露。

     (5)指针在指向的动态内存释放后应该重新置为NULL,防止野指针。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值