数组的操作

    int array[]={1,2,34,5,44};
    printf("\narray的值是:%p\n",array);
    printf("\narray&的值是:%p\n",&array);
    printf("\narray[0]&的值是:%p\n",&array[0]);
    printf("\narray[1]&的值是:%d\n",*(array+1));
    printf("\narray[2]&的值是:%d\n",*(array+2));
    printf("\narray[2]&的值是:%p\n",(array+1));

还是看下打印

JNI学习第四天

通过打印可知道: array   &array  & array[0]  所得到的东西都是一样的,都是代表的array的地址。

*(array+1)    *(array+2)  这些取到的都是数组内的元素这个操作可以理解为   指针指向array数组下标为1和2的元素

     针对最后一个我们来多打印几个   

    printf("\narray+1&的值是:%p\n",(array+1));
    printf("\narray+2&的值是:%p\n",(array+2));
    printf("\narray+3&的值是:%p\n",(array+3));
    printf("\narray+4&的值是:%p\n",(array+4));

    printf("\narray+5&的值是:%p\n",(array+5));
    printf("\narray+6&的值是:%p\n",(array+6));

下面是打印结果

array+1&的值是:0x7ffeefbff664

array+2&的值是:0x7ffeefbff668

array+3&的值是:0x7ffeefbff66c

array+4&的值是:0x7ffeefbff670

array+5&的值是:0x7ffeefbff674

array+6&的值是:0x7ffeefbff678

以此我们可以推断 array+i代表下标对应的地址  而int占4个字节  地址是16进制表示故 array+1就是&array 的地址加4得到

0x7ffeefbff664,以此类推 。

思考:我们定义的数组长度是5,为何我们打印array+5  array+6都有值并且还是连续的。

个人认为我们虽然定义了数组但是没有给定固定长度,而只是在里面添加的内容。我想数组也是有个基础长度,于是我们来打印

    printf("\n*(array+5)的值是:%d\n",*(array+5));
    printf("\n*(array+6)的值是:%d\n",*(array+6));

得到结果

*(array+5)的值是:32766 //这个值是不变的,数组中是不存在这个值的

*(array+6)的值是:-1414660043  //这个值一直在变

基于此不知道是不是个人认为的那样了。有待学习验证,由于自己是小白,希望懂的朋友不吝赐教,感激不尽。

 

 

 

 

 

 

相关文章: