数组的运算


    在进行数组运算之前,  首先,我们需要对 arr, &arr, &arr[0]有一个很好的了解


  看代码:

     

  运行结果:

        

 

      可见三者的值相同,那么三者是不是绝对相同呢?

   再仔细分析下列代码:

      

    运行结果:

       

    由此得出结论:虽然arr, &arr, &arr[0]三者值相同,但三者类型并不相同

                   数组名-----arr  表示数组首元素的地址

                   arr+1   则表示第二个元素的地址

                   &arr[0]   表示第一个元素的地址

                   &arr[0]+1则表示第二个元素的地址

                   &arr  表示整个数组的地址

                   &arr+1 则跳过整个数组


有关数组的运算

     经过上面的分析后,接下来正式开始数组的运算


        这里简单介绍下sizeof() 和 strlen()

            sizeof()    C/C++操作符

                作用:返回类型所占的内存字节数

            strlen(字符数组)    一个函数

                作用:测量字符串长度的函数。函数的值为字符串的实际长度(不包括’\0’在内)

            注:strlen()参数必须是字符型指针(char*,且必须是以’\0’结尾的

      

  1.一维数组

       


        这里需要注意 sizeof()什么时候测量数组大小

        

       分析: sizeof(a)  数组名放于sizeof()内部,表示整个数组的大小,单位字节

             sizeof(a+0)   不是数组名放于sizeof()内部,则数组名降级变为数组首元素地址,a+0则表示数组第一个元素的地址。同理,a+1 表示第二个元素的地址

             sizeof(*a)  a表示首元素地址,*a 对a进行解引用,则表示a所指向地址的内容,即首元素

             sizeof(&a)  &a 表示数组的地址,则&a+1 表示跳过整个数组的地址   *&a (整型的地址解引用能访问一个整型,字符的地址解引用能访问一个字符,)数组的地址解引用则访问整个数组的大小 



       字符数组

        

        运行结果:

          


     


            

             分析: char arr[] = {‘a’,’b’,’c’,’d’,’e’,’f’}  数组中只存放了a b c d e f 数组大小为6

                        char arr[] = “abcdef”  数组中存放了a b c d e f \0 数组大小为7



    字符串:

         

          

          解释:

                Char *p = “abcdef”;

        

                常量字符串放于内存的只读内存区,p中存放’a’的地址,&p为指针变量p的地址.

        

  2.二维数组 

      二维数组可被看作是一种特殊的一维数组,它的元素又是一个一维数组

        Eg: int  a[3][4]

           a可看作是一个一维数组,它有三个元素:a[0],a[1],a[2]

          每个元素又是一个一维数组:

              a[0] -----------    a[0][0]    a[0][1]   a[0][2]    a[0][3]

              a[1] -----------    a[1][0]    a[1][2]   a[1][2]    a[1][3]

              a[2] -----------    a[2][0]    a[2][1]   a[2][2]    a[2][3]


     


       现在我们来看下面的运算:

   

    

         分析:

              sizeof(a[0]) a[0] 第一行数组名,则sizeof(a[0]) 表示第一行大小

              sizeof(a[0]+1)  a[0]第一行数组名,没有单独放于sizeof()内部,则a[0]降级为首元素的地址,a[0]+1 表示第一行第二个元素

              sizeof(a+1)  a表示二维数组数组名,没有单独放于sizeof()内部,数组名降级为首元素地址(a[0]),a[0]+1则表示第二行地址


           注:sizeof()内部表达式不参与运算


    

    

  总结:

       数组名代表整个数组的时候只有两种情况:
                  sizeof(数组名),这里的数组名表示整个数组。
                 &数组名,这里的数组名表示整个数组。 

        除此之外,所有的数组名均代表数组首元素的地址


  

  




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值