1

我在函数参数中传递了一个数组,当我尝试访问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
4

3 回答 3

3

arr[-1]不访问最后一个元素。从概念上讲,它访问第一个元素之前的空间,但未定义行为。

要访问最后一个元素,请使用arr[nelement-1]arr[NumberOfElements-1],具体取决于最后一个元素的含义。(您是在考虑数组只包含nelement元素,还是想要整个分配数组中的最后一个元素?如果是后者,您需要知道数组中元素的数量才能计算最后一个元素的索引.)

于 2013-01-22T17:26:08.503 回答
2

数组索引应无符号。使用负值作为数组的索引会引发未定义的行为。


作为旁注:

此代码不会将 ( int) 元素的数量传递给函数:

int arr[] = {1,2,3,4,5,6,7,8,9};
...
flag = binsearch(flag, arr, sizeof(arr));

由于sizeof运算符返回.使用的字节arr数。

要传递int数组提供的 s 数量,您可能希望使用以下构造:

flag = binsearch(flag, arr, sizeof(arr)/sizeof(arr[0]));
于 2013-01-22T17:42:10.630 回答
0

由于maxsizesizeof(arr)而 arr 是一个int数组- 它是(sizeof(int) * no_of_elements_of_arr)

它必须arr[(maxsize/sizeof(int)) - 1]代替arr[-1]

arr[-1]预计会打印一些垃圾

于 2013-01-22T17:32:18.763 回答