W tym kodzie nic nie pisze tylko jest napisane, ale do rzeczy zacznę od maina:
deklarujesz zmienną typu int następnie dwukrotnie wypisujesz wynik działania funkcji fun na tej zmiennej(właściwie na wskaźniku do niej, a na samym końcu wypisujesz tą zmienną.
Co dzieje się w funkcji fun:
deklarujesz zmienną statyczną, domyślnie zmienne statyczne są inicjalizowane zerem więc taką ma wartość. zwiększasz wartość dereferencji ze wskaźnika a czyli zwiększasz wartość zmiennej przesłanej do tej funkcji. następnie zwiększasz wartość x o wartość tej samej zmiennej co linikę wcześniej została zinkrementowana. Dalej znów inkrementujesz tą zmienną i zwracasz wartość x powiększoną o tą s zmienną. I to właściwie tyle.
Jak drugi raz wywołujesz funkcję fun to zmienna x nie jest już zerowana. To jest cecha zmiennych statycznych, że są dostępne tylko w danej funkcji ale nie można ich wielokrotnie zadeklarować, a co za tym idzie zainicjalizować. Więc za drugim wywołaniem x ma wartość początkową 2.
Dwa zastrzeżenia: chyba nie do końca ten kod jest skopiowany brakuje 0; } bez tego się nie skompiluje i jak używasz using namespace std; to nie sugeruj tematem, że to jest programowanie w C, bo ten zapis pochodzi z C++, a jak już piszesz w C++ wykorzystując biblioteki z C to używaj #include <cstdio> zamiast <stdio.h>