Put simply, a block is a chunk of executable code, and a lexical closure of the environment in which it was created, that can be passed around like data and executed when needed. You might think of it as a function that can be passed around like Plain Old Data, however the function carries with it the environment in which it was defined. The idea takes some getting used to, but once understood, Blocks become a powerful tool for solving problems.
Rather than post a lot of code here, I would invite you to explore this new language feature on your own. Apple has a good document which introduces a developer to the syntax and semantics of blocks here:
An interesting article on the uses of blocks in different contexts can be found here:
The developer community will be happy to know that Apple has submitted the specification for blocks (along with a specification for Garbage Collection) to C Standards working group for public consumption, see:
That means that any C language compiler has the potential to implement blocks in the future. This has great potential to put a powerful new tool into the hands of programmers in any of a number of environments.