数组和指针的关系

来源:互联网 发布:c语言求三个数最小值 编辑:程序博客网 时间:2024/04/28 13:21

指针提供了一种用来使用地址的符号方法。指针能够有效地处理数组。数组标记实际上就是一种变相使用指针的形式。数组名同时也是该数组首元素的地址。

例如下面这样程序:

#include <stdio.h>
#define SIZE 4
int main()
{
    short data[SIZE];
    short *pti;
    short index;
    double bills[SIZE];
    double *ptf;


    pti=data;
    ptf=bills;
    printf("%20s %10s \n","short","double");
    for(index=0;index<SIZE;index++)
     {

       printf("pointer+%d:%10p %10p\n",index,pti+index,ptf+index);

       printf("pointer+%d:%10p %10p\n",index,data+index,bills+index);

      }
    return 0;
}


输出如下:

                   short                 double 
pointer+0:0xbf96697c  0xbf966958
pointer+0:0xbf96697c  0xbf966958
pointer+1:0xbf96697e  0xbf966960
pointer+1:0xbf96697e  0xbf966960
pointer+2:0xbf966980  0xbf966968
pointer+2:0xbf966980  0xbf966968
pointer+3:0xbf966982  0xbf966970
pointer+3:0xbf966982  0xbf966970


此处data,bills是数组首元素的地址,data+index、bills+index是数组data、bills的第index个元素的地址。

short类型是使用2个字节,double 类型使用8个字节。指针说明符%p是用于显示地址,通常以十六进制显示。

对一个指针加1的结果就是对该指针增加1个存储单元。对于数组而言,地址会增加到下一个元素的地址,而不是下一个字节。

1)指针的数值就是它指向的对象的地址。地址的内部表示方式由硬件来决定。对于包含多个字节的数据类型,比如double类型的变量,对象的地址通常指的是其首字节的地址。

2)在指针前运用*运算符就可以得到该指针所指向的对象的数值。

3)对指针加1,等价于对指针的值加上它所指向的对象的字节大小。


对于下面的语句:

data+2==&data[2];    //相同的地址

*(data+2)=data[2];     // 相同的值

说明了数组与指针的密切关系:可以用指针标识数组的每个元素,并得到每个元素的数值。从本质上说,对同一种对象有两种不同的符号表示方法。

例如,定义a[n]时,意思是*(a+n),即“寻址到内存中的a,然后移动n个单位,再取出数值”。













0 0
原创粉丝点击