使用if语句打印数组中的最后一个元素

时间:2019-05-26 12:20:53

标签: c arrays pointers if-statement

我目前正在尝试学习在C中一起使用指针和函数,我认为这并不容易。 我试图打印数组中的最后一个元素,它实际上执行相反的操作并打印第一个元素。 我知道人们通常使用for循环,但是我无法弄清楚该如何解决此类问题,因此我认为我可以使用if语句来尝试。

编辑: 如果在这种情况下语句不起作用,为什么会这样?看来应该可行...

我的main.c文件:

#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
#define Size 7

int main(void) 
{

    int array1[] = { 11, 88, 5, 9, 447, 8, 68, 4 };

    maxValue(array1, Size);

    return 0;
}

我的functions.h文件:

#pragma once

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

int maxValue(const int *, int);

#endif

我的functions.c文件:


#include "functions.h"
#include <stdio.h>
#include <stdlib.h>


int maxValue(const int *array1, int Size)
{

    int max = array1[0];

    if (max < array1[Size]) {
        Size++;
        max = array1[Size];
    }

    printf("Max value: %d \n", max);
}


3 个答案:

答案 0 :(得分:0)

在这种情况下为什么if语句不起作用?似乎应该这样做是合理的……?因为在这里

if (max < array1[Size]) { }

Size被定义为7,并且您正在将array1[0]array1[7]进行比较,即11 < 4-> false,因此它不会输入{{ 1}}块,因此最后一个if执行并打印printf。但是,如果max块变为true,则进一步的if会导致访问超出范围的数组元素,这会导致未定义的行为

Size++

答案 1 :(得分:0)

让我们模拟当CPU使用这些参数进入maxValue函数时CPU的功能。 1。。变量max的值为array1[0],即11。 2。。如果max(11)小于array1[7](4)。不会,因此不会执行if块。 3。:打印max:打印11。

另一件事:您的程序导致未定义的行为。让我们来看一个示例,其中array1[0]是3而不是11。将执行if块(3 <4),因此: Size增至8。 max被分配了array1[8]。由于array1中的最后一个索引为7(这就是您声明数组的方式),因此您正在访问不应该访问的内存地址。这是不确定的行为。

答案 2 :(得分:0)

名称maxValue()max会误导您并使您尝试执行的操作感到困惑。 lastValue()last会更有意义。

但是在C语言中,由于数组的长度已知,因此您尝试执行的操作没有任何意义,因此您可以直接访问最后一个元素:

int array1[] = { 11, 88, 5, 9, 447, 8, 68, 4 };
int array_length = sizeof(array1) / sizeof(*array1) ;
printf("Lastvalue: %d \n", array1[array_length - 1] ) ;

但是,您不能在函数中执行此操作,因为数组不是C中的第一类数据类型,并且在传递给函数时将“降级”为简单指针,而没有任何有关所指向数组大小的信息。具有大小信息的调用函数也必须传递该信息(就像您已经做过的那样,但是随后看起来很困惑):

void printLast( int* array, int length )
{
    printf( "Lastvalue: %d \n", array1[length - 1] ) ;
}

很难理解为什么您认为可能需要任何其他代码,或者您的maxValue()函数打算实现什么。因此,您说“应该工作”的“逻辑”是:

  

如果第一个数组元素的值小于最后一个数组元素的值,则在数组末尾打印一个 undefined 值;否则,打印数组的第一个元素。

如果要打印最后一个元素,则只需打印它,第一个元素的值与它无关。无论哪种方式,您都不应索引超出数组末尾的位置-该值是不确定的。