从函数中读取数组的索引

时间:2017-03-10 07:23:27

标签: c arrays function

在下面的true函数中,我尝试使用main()在数组中打印值。

age_index()的参数是数组的索引。

我希望它在该索引处打印数组值。

这是我的尝试:

age_index()

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您的问题属于

enum

您允许数组的索引从if (age < 7 && age >= 0) 0,而您的数组索引必须介于60之间。

您应该使用5来避免此类问题

sizeof

通过这种方式,即使您将来更改它的大小,也始终会检查数字当前大小的年龄。

此外,正如您在代码中看到的那样,您可以使用以下命令初始化数组:

void age_index(size_t age) {    
    int ages[] = {23, 33, 18, 121, 30, 66};

    if ((age >= 0) && (age < sizeof(ages)/sizeof(ages[0]))) {
        printf("you are [%d] years old!\n", ages[age]);
    } else {
        printf("Sorry, did not choose 0-%zu\n", sizeof(ages)/sizeof(ages[0]));
    }
}

答案 1 :(得分:1)

由于数组的大小为“6”。数组索引的范围应为0到5.您需要相应地更改if条件。

if(age >= 0 && age < 6)

而不是使用像这样的硬编码值。您可以通过以下方式选择使用sizeof()运算符:

int numOfElements = sizeof(array)/sizeof(array[0]);

if(age >= 0 && age < numOfElements)
{
    ....
    ....
}

或者您可以定义一个指示数组大小的宏,如下所示:

#include <stdio.h>
#define MAX_LEN  6
.
.
.
int main(void)
{
    ....
    ....
}

if(age >= 0 && age < MAX_LEN)
{
    ....
    ....
}

答案 2 :(得分:0)

更改您的if条件:

if (age < 7 && age >= 0)

到:

if (age < 6 && age >= 0)

您的Index数组的大小为6,因此其索引从0开始,到5结束。如果您输入的数字x大于5,您的程序将尝试访问元素Index[x],这将超出数组范围。

此外,您的问题无法编译。将第一行更改为:

#include <stdio.h>

并将分号添加到为Index元素指定值的所有语句中。