数组的操作
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));
还是看下打印
通过打印可知道: 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 //这个值一直在变
基于此不知道是不是个人认为的那样了。有待学习验证,由于自己是小白,希望懂的朋友不吝赐教,感激不尽。