给定一个数组,获取最大值及其下标并输出。有一个是错的。请问怎么分析这4段代码呀?

A


#include <stdio.h>
#define LEN 10

int main(int argc, char** argv)
{
    int i, max, index = 0;
    int arr[LEN] = {7, 2, 1, 3, 6, 9, 4, 10, 5, 8};
    int *p = arr;

    max = arr[0];
    for (i = 0; i < LEN; ++i)
        if (*(p + i) > max)
        {
            max = *(p + i);
            index = i;
        }

    printf("max = arr[%d] = %d\n", index, max);

    return 0;
}

B


#include <stdio.h>
#define LEN 10

int main(int argc, char** argv)
{
    int i, max, index = 0;
    int arr[LEN] = {7, 2, 1, 3, 6, 9, 4, 10, 5, 8};

    max = arr[0];
    for (i = 0; i < LEN; ++i, ++arr)
        if (*arr > max)
        {
            max = *arr;
            index = i;
        }

    printf("max = arr[%d] = %d\n", index, max);

    return 0;
}

C

#include <stdio.h>
#define LEN 10

int main(int argc, char** argv)
{
    int i, max, index = 0;
    int arr[LEN] = {7, 2, 1, 3, 6, 9, 4, 10, 5, 8};
    int *p = arr;

    max = arr[0];
    for (i = 0; i < LEN; ++i)
        if (p[i] > max)
        {
            max = p[i];
            index = i;
        }

    printf("max = arr[%d] = %d\n", index, max);

    return 0;
}

D

#include <stdio.h>
#define LEN 10

int main(int argc, char** argv)
{
    int i, max, index = 0;
    int arr[LEN] = {7, 2, 1, 3, 6, 9, 4, 10, 5, 8};
    int *p = arr;

    max = arr[0];
    for (i = 0; i < LEN; ++i, ++p)
        if (*p > max)
        {
            max = *p;
            index = i;
        }

    printf("max = arr[%d] = %d\n", index, max);

    return 0;
}

B是错的,如图数组名arr其实代表首地址,它不能进行自增运算。

img


这类题做题是有技巧的,就本题来说,它让你获取一个数组所有数组元素中的最大值及其下标,那就要用到for循环进行遍历,那它出题的关键点就是
1.for(;;)中的语句:

img

2.判断语句:

img


3.数组跟指针的联系:

img

A,C,D都符合给定一个数组,获取最大值及其下标并输出的要求。

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!

B是错误的,arr 是数组的首地址, 不能改变。