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> 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);
}
3 Réponses :
Pourquoi si la déclaration ne fonctionne pas dans ce cas? Il semble logique qu'il devrait fonctionner ... em> car ici taille code> est défini comme 7 code> et vous êtes comparer array1 [0] code> avec array1 [7] code> ie 11 <4 code> -> false, il n'entre pas dans si code> bloc, donc le dernier printf code> exécute et qui imprime max code>. Mais ce n'est pas une logique correcte si si code> bloque devient true, davantage Taille ++ code> causera l'accès des éléments de matrice liés qui provoquent
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 code>.
@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] code> devrait être IT).
Simulons ce que le CPU fait quand il entre dans la fonction MaxValue avec ces arguments. 1. strong> La variable Une autre chose: votre programme provoque un comportement non défini. Prenons un exemple où max code> est attribuée à la valeur de array1 [0] code>, qui est 11.
2. strong> si max code> (11) est inférieur à array1 [7] code> (4). Ce n'est donc pas, donc le bloc si code> n'est pas exécuté.
3. strong> Imprimer max code>: Imprimer 11. P>
aray1 [0] code> est 3, au lieu de 11. Le bloc IF sera exécuté (3 <4), donc:
Taille Code> est incrémenté à 8.
max code> est attribué array1 [8] code>. Depuis le dernier index dans Array1 code> 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. P>
Les noms 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> 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> 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. void printLast( int* array, int length )
{
printf( "Lastvalue: %d \n", array1[length - 1] ) ;
}
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.