我在函数参数中传递一个数组,当我尝试使用函数体中的arr[-1]
访问最后一个元素时,我得到了一些垃圾。有人可以解释我为什么会这样吗?
以下是代码:
#include<stdio.h>
using namespace std;
int binsearch(int nelement, int arr[],int maxsize)
{
int low = 0;
int high = maxsize;
printf("%d",arr[-1]);
return 0;
}
void main()
{
int arr[] = {1,2,3,4,5,6,7,8,9};
int flag = 3;
printf("%d\n",arr[8]);
flag = binsearch(flag,arr,sizeof(arr));
}
这是输出:
9
-858993460
答案 0 :(得分:3)
arr[-1]
无法访问最后一个元素。从概念上讲,它访问第一个元素之前的空格,但未定义行为。
要访问最后一个元素,请使用arr[nelement-1]
或arr[NumberOfElements-1]
,具体取决于您对最后一个元素的含义。 (您是否认为数组仅包含nelement
个元素,或者您是否想要整个已分配数组中的最后一个元素?如果是后者,则需要知道数组中元素的数量以便计算最后一个索引。)
答案 1 :(得分:2)
数组指示应无符号。使用负值作为数组的索引会引发未定义的行为。
作为旁注:
此代码不会将(int
)元素的数量传递给函数:
int arr[] = {1,2,3,4,5,6,7,8,9};
...
flag = binsearch(flag, arr, sizeof(arr));
由于sizeof
运算符返回arr
使用的字节数。
要传递数组提供的int
个数,您可能希望使用以下结构:
flag = binsearch(flag, arr, sizeof(arr)/sizeof(arr[0]));
答案 2 :(得分:0)
由于 maxsize 是 sizeof(arr)而arr是 int 的数组 - 它是(sizeof(int) * no_of_elements_of_arr)
必须arr[(maxsize/sizeof(int)) - 1]
代替arr[-1]
arr[-1]
预计会打印一些垃圾值