首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用if语句打印数组中的最后一个元素

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

Stack Overflow用户
提问于 2019-05-26 20:20:53
回答 2查看 486关注 0票数 -2

我目前正在尝试学习如何在C中同时使用指针和函数,我认为这并不容易。我试图打印数组中的最后一个元素,它实际上做了相反的事情,打印了第一个元素。我知道人们通常使用for循环,但我不知道如何处理这种问题,因此我想我可以用if语句来代替它。

编辑:为什么if语句在这种情况下不起作用?这似乎是逻辑上的,它应该工作。

我的main.c文件:

代码语言:javascript
复制
#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文件:

代码语言:javascript
复制
#pragma once

#ifndef FUNCTIONS_H
#define FUNCTIONS_H

int maxValue(const int *, int);

#endif

我的functions.c文件:

代码语言:javascript
复制
#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);
}
EN

回答 2

Stack Overflow用户

发布于 2019-05-26 20:29:15

为什么if语句在这种情况下不起作用?这似乎是合理的,它应该工作...?因为在这里

代码语言:javascript
复制
if (max < array1[Size]) { }

Size被定义为7,并且您正在比较array1[0]array1[7],即11 < 4 -> false,因此它不会进入if块,因此执行最后一个printf并打印max。但这不是一个正确的逻辑,如果if块为真,那么进一步的Size++将导致访问越界数组元素,从而导致未定义的行为

代码语言:javascript
复制
int maxValue(const int *array1, int Size)
{
    int max = array1[0];
    if (max < array1[Size]) { /* 11 < 4 false, skips if block */
        //Size++; /* this is wrong as Size++ here and next accessing array1[Size] cause UB due to accessing out of bound array element */
        max = array1[Size];
    }
    printf("Max value: %d \n", max); /* max is stills array1[0] i.e 11 */
}
票数 0
EN

Stack Overflow用户

发布于 2019-05-26 22:41:20

让我们模拟一下,当CPU使用这些参数进入maxValue函数时会做些什么。1.变量max被赋值为array1[0],即11. 2.如果max (11)小于array1[7] (4),则为。它不是,所以不会执行if块。3. Print max:打印11.

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档