Passing by value means a copy of an argument is passed. Changes to that copy do not change the original.
If you understand c++ maybe this will help you:
void Foo(Bar) {} // pass by value c# (if it's a value type ;))
void Foo(Bar) {} // c++
void Foo(Bar) {} // pass by reference c# (if it's a reference type ;))
void Foo(Bar&) {} // c++
void Foo(ref Bar) {} // c#
void Foo(Bar*) // c++
void Foo(out Bar) {} // c#
void Foo(Bar**) {} // c++ (the contents of *Bar needs to be filled up)