指针与数组--指针访问与下标访问

时间:2021-10-25 02:44:04

指针与数组下标访问与指针访问的区别如下:        

 char *p="abcde";

char a[5]={1,2,3,4,5};
printf(" p+4  = 0x%p,*(p+4) = 0x%x\n",p+4,*(p+4));
printf("&p[4] = 0x%p, p[4]  = 0x%x\n",&p[4],p[4]);
printf(" a+4  = 0x%p,*(a+4) = %d\n",a+4,*(a+4));

printf("&a[4] = 0x%p, a[4]  = %d\n",&a[4],a[4]);


        仿真局部变量的地址与结果如下所示:

        指针与数组--指针访问与下标访问

(1)以指针形式访问指针

       *(p+4)。指针p的地址为0x00415754,加上4个字符的偏移量后的新地址为0x00415758,然后取出新地址中的内容0x65(e)。

(2)以下标形式访问指针

       p[4]。编译器将下标形式的操作解析为以指针形式的操作。首先取出 指针p的地址0x00415754,再加上4个字符的偏移量后的新地址为           0x00415758,然后取出新地址中的内容 0x65(e)。

(3)以指针形式访问数组

*(a+4)。数组a的首地址为0x0012ff4c,加上4个字符的偏移量后的新地址为0x0012ff50,然后取出新地址中的内容 5。

(4)以下标形式访问指针

a[4]。编译器将下标形式的操作解析为以指针形式的操作。首先取出数组a的首地址为0x0012ff4c,加上4个字符的偏移量后的新地址为0x0012ff50,然后取出新地址中的内容 5。


测试结果如下:

             指针与数组--指针访问与下标访问