-2
votes

Impression du dernier élément dans une matrice en utilisant si la déclaration

J'essaie actuellement de savoir d'utiliser des pointeurs et des fonctions ensemble dans C, que je ne pense pas être facile. J'essaie d'imprimer le dernier élément dans un tableau, il fait en réalité le contraire et imprime le premier élément. Je sais que les gens utilisent normalement pour les boucles, mais je ne peux pas comprendre comment faire cela avec exactement ce genre de problème et donc je pensais que je voudrais essayer avec une déclaration IF à la place.

Edit: Pourquoi si la déclaration ne fonctionne pas dans ce cas? Il semble logique qu'il devrait fonctionner ... p>

mon fichier principal.c: p> xxx pré>

mon fonctions.h Fichier: P>

#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);
}



1 commentaires

Expliquez clairement ce que vous avez l'intention d'atteindre, car l'impression du dernier élément est trivialement simple et ne nécessite ni une boucle ni une conditionnelle, donc votre code et votre déclaration sur ce que «les personnes normalement» n'ont aucun sens. Soit ce que vous voulez faire est plus complexe que indiqué ou vous êtes très perdu.


3 Réponses :


0
votes

Pourquoi si la déclaration ne fonctionne pas dans ce cas? Il semble logique qu'il devrait fonctionner ... car ici xxx

taille est défini comme 7 et vous êtes comparer array1 [0] avec array1 [7] ie 11 <4 -> false, il n'entre pas dans si bloc, donc le dernier printf exécute et qui imprime max . Mais ce n'est pas une logique correcte si si bloque devient true, davantage Taille ++ causera l'accès des éléments de matrice liés qui provoquent comportement non défini . xxx


6 commentaires

C'est logique. Mais votre code trouve la plus grande valeur de la matrice. Je n'aurais peut-être pu préciser que je voulais trouver l'entier qui tient la dernière place dans le tableau.


Donc, je voulais dire l'entier 4.


@Acal Votre fonction a-t-elle besoin de retourner quelque chose?


@kiranbiradar Il est préférable de revenir en tant que type de retour mentionné par OP comme int .


@Thecnewbie J'ai édité la réponse. J'espère que c'est clair maintenant.


@Achal op veut imprimer / retourner le dernier élément de ne pas trouver max dedans ( aray1 [lastIndex] devrait être IT).



0
votes

Simulons ce que le CPU fait quand il entre dans la fonction MaxValue avec ces arguments. 1. La variable max est attribuée à la valeur de array1 [0] , qui est 11. 2. si max (11) est inférieur à array1 [7] (4). Ce n'est donc pas, donc le bloc si n'est pas exécuté. 3. Imprimer max : Imprimer 11.

Une autre chose: votre programme provoque un comportement non défini. Prenons un exemple où aray1 [0] est 3, au lieu de 11. Le bloc IF sera exécuté (3 <4), donc: Taille est incrémenté à 8. max est attribué array1 [8] . Depuis le dernier index dans Array1 est 7 (c'est la manière dont vous avez déclaré la matrice), vous accédez à une adresse de mémoire que vous n'êtes pas censé accéder. Ceci est un comportement indéfini.


0 commentaires

0
votes

Les noms maxvalue () code> et max code> sont trompeurs et déroutant ce que vous essayez de faire. lastvalue () code> et dernier code> gagnerait beaucoup plus de sens.

Cependant, ce que vous essayez de faire n'a aucun sens en C parce que les tableaux sont de longueur connue, afin que vous puissiez Accédez directement au dernier élément: p> xxx pré>

Cependant, vous ne pouvez pas le faire dans une fonction car les tableaux ne sont pas des types de données de première classe dans C et lorsqu'il est passé à une fonction "dégradera" à une fonction "dégradera" Un pointeur simple sans aucune information concernant la taille de la matrice pointée. La fonction d'appel à la taille de la taille doit transmettre cela aussi (comme vous l'avez fait, mais est apparu pour devenir très confus): p>

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


0 commentaires