zoukankan      html  css  js  c++  java
  • 【扩展知识3】一些困难的数组

    【扩展知识3】一些困难的数组

    扩展文件夹

    1.        &array+ 1

    2.        array+1

    3.        &array[ 0 ]+ 1

    关于&array+ 、array+ 1 和&array[0]+ 1的问题。特别难缠,特难搞懂~—~。

    所以今天拿来解说解说。

    因为数组中的各元素的存储单元是连续分配的,因此能够用指针形式来訪问数组。数组名就是该数字的首个地址。

    如: intarray[100];

          array 就是该数组的首地址,其值等于& array[0]

    PS: 通过收地址,能够非常快的、方便的訪问数组中的其它元素值,方法例如以下:

            首地址+ 偏移量

    第i 个元素的值能够是   *(array+i), *(&array[0]+i),  array[ i ]

    array是数组首元素的首地址,&array[0]同样。而&array是取数组首地址

     

    [程序1]

    #include <stdio.h>
     
    int main( void )
    {
             int array[ 5 ]= { 1, 2, 3, 4, 5 };
            
             printf( "        array[ 1 ]= %d
    ", array[ 1 ] );
             printf( "        *(array+1)= %d
    ", *(array+ 1) );
             printf( "*( &array[ 0 ]+ 1 )= %d
    ", *(&array[ 0 ]+ 1 ) );
            
             return 0;
    }

    执行结果:

              array[ 1 ]= 2

             *(array+1)= 2

    *(&array[ 0 ]+ 1 )= 2

     

    [程序 2]

    #include <stdio.h>
     
    int main( void )
    {
             int array[ 5 ]= { 1, 2, 3, 4, 5 };
            
             printf( "        array[ 1 ]= %d
    ", array[ 1 ] );
             printf( "        *(array+1)= %d
    ", *(array+ 1) );
            printf( "     *( &array+ 1 )= %d
    ", *( &array+ 1 ) ); //越界 !。!

    return 0; }



    执行结果:

              array[ 1 ]= 2

             *(array+1)= 2

    *(&array[ 0 ]+ 1 )= 2293440

    分析:

    array:   是数组首元素的首地址,也就是array[0]的首地址

    &array:是取数组的首地址。

    &array+ 1:

    取数组array的首地址,该地址的值加上sizeof( array ),即&array+ 5* sizeof( int ),也是下一个数组的首地址。   

    array+ 1://等同于&array[ 0 ]+ 1;

    是取数组下一个元素的首地址,就是array[ 1 ]的首地址。

     

    如图所看到的:

    发现&array+ 1的地址越界了,其为array[5]的地址,即&array+ 1= &array+ 5* sizeof( int )。而array+1和&array[0]的地址就是array[1]的地址。

    【指尖的微笑】错误在所难免,希望得到大家的指正^-^

    转载时保留原文的链接http://oursharingclub.joinbbs.nethttp://blog.csdn.net/mirrorsbeyourself

    版权声明:一半的人阅读这篇文章皆有(http://www.bangedushuren.cn/)技术部门LearnCoding(http://it.bangedushuren.cn/)原版的,转载请注明

  • 相关阅读:
    Spring MVC+FreeMarker简介
    集合框架
    异常处理
    c语言中的一些注意点
    在ScrollView中自定义GridView无法显示全部的问题的解决
    Android 发送request请求在服务器端解析时乱码
    Android 4.1 APP中的static变量即使在APP退出后仍然不会被擦除
    关于Android的asynctask-threads-limits问题:asynctask开启的线程是否有极限
    ListView中各组件点击事件冲突,ListView不响应OnItemClickListener事件
    异常:java.lang.NoClassDefFoundError: com.android.volley.toolbox.Volley
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4679836.html
Copyright © 2011-2022 走看看