我爱电脑技术论坛's Archiver

3636600 发表于 2008-6-12 00:27

C/C++中数组和指针类型的关系

 对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识!  一个整数类型数组如下进行定义:
*`$Xv6] U0Ks[-A Ml [color=#0000ff]int[/color] a[]={1,2,3,4}; ]-JwE O
  如果简单写成:.o tf'j0X"s M#K
a;[color=green]//数组的标识符名称[/color]
%B!oxEX-Bz.{/W   这将代表的是数组第一个元素的内存地址,a;就相当于&a[0],它的类型是[color=#ffffff]数组元素类型的指针[/color],在这个例子中它的类型就是int* ,G.O1T%Yj$e
M\pw-BK:P
  如果我们想访问第二个元素的地址我们可以写成如下的两种方式:%h],OR[*Z+f*z&Rw
&a[1];  
:QQ5S9n4y6A0J   %h8k-M;sJ.LQ{
a+1[color=green]//注意这里的表示就是将a数组的起始地址向后进一位,移动到第二个元素的地址上也就是a[0]到a[1]的过程![/color]/Y5YF;YVvo8G,|3o.I
  数组名称和指针的关系其实很简单,其实数组名称代表的是数组的第一个元素的内存地址,这和指针的道理是相似的!
'cN%G*Y/Fa1w   下面我们来看一个完整的例子,利用指针来实现对数组元素的循环遍历访问!
1tWo,DUpAG #include <[color=maroon]iostream[/color]>  
nx UAX%DWE [color=blue]using[/color] [color=blue]namespace[/color] std;  
]'G8c1L7Y2R   
gX;^Sc"_'X&D [color=blue]void[/color] [color=blue]main[/color]([color=blue]void[/color])   BG)Z\_B5F
{  
M9Xi*A4W     [color=blue]int[/color] a[2]={1,2};  
]7J]5[%r\$~p   
;lp#j;|-o5g6D     [color=blue]int[/color] *pb=a; [color=green]//定义指针*pb的地址为数组a的开始地址 [/color]
&mc6H(AIl!A!i-z   `oz-uX4ah
    [color=blue]int[/color] *pe=a+2; [color=green]//定义指针*pb的地址为数组a的结束地址 [/color]
B{TN5v   M~VL5hD?5t
    [color=maroon]cout[/color] << a << "|" << a[0] << "|" << *(a+1) << "|" << pb << "|" << *pb <<endl;  
h E@F'G/V       :D{(~!m%x(w:Z_z d
    [color=blue]while[/color] (pb!=pe) [color=green]//利用地址进行逻辑判断是否到达数组的结束地址 [/color] *d-l |^7s(L
    {  Oz S+S~I*vk']
        [color=maroon]cout[/color] << *pb << endl;  0{7A6Z H-[W5p
        pb++; [color=green]//利用递增操作在循环中将pb的内存地址不断向后递增 [/color]
&UB2Qi@(Z?     }  
|.\A2h'S @;w }!M     [color=maroon]cin[/color].get();  
[#r LJC5Z6KVx }

页: [1]
   

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.