你分得清楚给函数传址时,arr,&arr[0],&arr的不同吗?

  • 第一种:arr这种是表示数组首元素的地址
  • 第二种:&arr[0]这种表示的和arr是一样的
  • 第三种:&arr这种表示的是整个数组的地址
  • 你分得清楚给函数传址时,arr,&arr[0],&arr的不同吗?_第1张图片

结果我们可以看到前两个地址是符合预期的,但是第三个为什么也是一样的。不妨地址+1

你分得清楚给函数传址时,arr,&arr[0],&arr的不同吗?_第2张图片

我们发现前两个符合地址+4(+1*sizeof(int))字节,后面的却是加了40(+数组长度10*sizeof(int))字节,就是直接跳过了这个数组,也说明了&arr表示的是arr数组的地址.

  • 综上就是: 他们分别加一后,前两个是直接下个元素的地址,后一个是直接跳过这个数组后一个元素的首地址
  • 特例对于函数里面的取地址,通常是用arr,而这个也表示首元素的地址,但是有种情况不同,表示的是整个数组的地址,是sizeof(arr),如果我们做合理的分析,如果arr表示的是首元素的地址,那么就应该像strlen函数一样有特殊字符进行停止,但是这里没有,int,float类型更不用说有什么特殊的数字来暂停这个函数,因此传入的就是整个数组的地址而并没有对数组进行遍历。

你可能感兴趣的:(算法,数据结构)