指针

指针的基础:

<1>定义

Code

 

      以上pa是一个指针,cout<<pa;输出的是它的地址

      而*pa是一个int值,cout<<*pa输出的是1;

<2>指针与其指向对象关联性

   由以上:

    假如我在上面分隔线上的代码中继续添加以下代码:

       *pa = 2;或 a = 2; 

        cout<<(*pa == a)<<endl;//输出1(true),证明是同时更新的;

<3> const与指针的使用(这个东西很阴的)

Code

<4> 指向指针的指针

Code

<5>内存分配(堆中)

Code

 关于指针的一些问题:

<1>指向常量的指针与分配了内存的指针

Code

:false,false,true,true

因为str1,str2,str3,str4都是字符串数组,都有分配自己的存储空间,他们的值都是指向各自的首地址,所以不等。而str5,str6不是字符数组而是常量指针,而“abc”是以常量的形式存储与静态数据区,因为相同的常量在数据区只会分配一块空间,因此str5,str6都是指向此静态区域的头地址,str7和str8同理。

<2>关于sizeof

 

Code

 

求输出:

:3(反白可以看见)

   11

使用数组作函数形参时数组指针自动退化为指针,因此在函数体内的sizeof只能求出指针的长度4;而在外的sizeof则能求出数值的整体长度,函数内的求长使用strlen,此函数所求长度不包括‘\0’,等于sizeof()-1;

改进方法是:

Code

<3>字符串数组与指针

Code

求输出:

(1)bcdefg(反白可以看见)

  (2)cdef

  (3)f

<4>关于函数中的参数指针及函数中分配内存

先说明一下;

使用new或malloc来申请空间需要改变pstr,这是重点,指针作参数是否正确使用可以说就是指针的地址值(不是其指向的类型)有没有被改变的问题,将指针看作一个数据类型,那么理解会比较容易。

看以下例子:

Code

 

 第一种方法(外部申请内存)(严格来说这种与上面讨论的无关,但是也记录下来吧):

Code

 然后在main函数中这样使用

Code

第二种方法(使用双重指针):

Code

第三种方法(使用指针的引用)

Code

<5>strlen的使用;

求字符串长度

Code

所以有如下:

Code

<6>指向数组的指针和指针数组

以下有什么不同?

Code

<7>指向类中成员的指针

Code

以上是使用指向类成员函数以及成员数据的方法,其实和普通的指向函数的指针和指向数据类型的指针原理是一样的,

不同的是需要在*号的前面加上类作用域。

 

以后找到一个关于指针的细节就补上一个,请各位也看过的也帮忙提些意见吧,让我好完善一下!谢谢。

posted @ 2009-04-02 16:28 剑鬼鬼 阅读(...) 评论(...) 编辑 收藏