ragazzi vorrei chiedervi delle spiegazioni su questonon posto tutto il codice altrimenti diventa infinito)

codice:
bool Cerca_Prodotto(const Magazzino  M, const int n, const char * C, int & pos){
    
    bool trovato=false;
    int i=0;
    pos=-1;
    
    cout <<"Trovato intermedio: "<<trovato<<endl;
    cout <<"i vale: "<<i<<endl;
    while(i<n && !trovato)
    
      if(!strcmp(M[i].Codice,C)) {
       cout <<"Trovato prima: "<<trovato<<endl;
       pos=i;
       trovato=true;
      cout <<"Trovato dopo: "<<trovato<<endl;
      }     
      else i++;
return trovato;   
}
questo il main.cpp

codice:
#include <cstdlib>
#include <iostream>

#include "Prodotti1.h"

using namespace std;

int main(int argc, char *argv[])
{
    // Test delle funzioni sul tipo prodotto
  Prodotto P1;
  Inserisci_DatiProdotto(P1);
  Visualizza_DatiProdotto(P1);
  // ********** FINE *********************
  
  // Inizio programma 
  Magazzino M;
  int n;

  // PARTE 1
  Crea_Magazzino(M,n);
  Visualizza_Magazzino(M,n);
  system("PAUSE");
  
   // PARTE 2
   char C[DIM];
   int pos=-1;
   cout << "\n Ricerca Prodotto.";
   cout << "\n Inserire il Codice: ";
   cin.ignore();
   cin.getline(C,DIM);
   if(Cerca_Prodotto(M,n,C,pos)) cout << "\n Prodotto presente. Posizione: " << pos;
   else  cout << "\n Prodotto NON presente." ;
   system("PAUSE");
vorrei sapere nella specifica della funzione Cerca_Prodotto, !trovato che significa(io penserei trovato==false) e perchè usa !strcmp per fare il confronto, cioè lui dovrebbe fare il confronto se strcmp torna 0 dovrebbe entrare nel ciclo if, ho molti dubbi nel capirlo.
Aspetto il vostro aiuto. Grazie