# Block expressions
+> **<sup>Syntax</sup>**
+> _BlockExpression_ :
+> `{`
+> [_InnerAttribute_]<sup>\*</sup>
+> [_Statement_]<sup>\*</sup>
+> [_Expression_]<sup>?</sup>
+> `}`
+
A _block expression_ is similar to a module in terms of the declarations that
are possible, but can also contain [statements](statements.html) and end with
an expression. Each block conceptually introduces a new namespace scope. Use
## `unsafe` blocks
+> **<sup>Syntax</sup>**
+> _UnsafeBlockExpression_ :
+> `unsafe` _BlockExpression_
+
_See [`unsafe` block](unsafe-blocks.html) for more information on when to use `unsafe`_
A block of code can be prefixed with the `unsafe` keyword, to permit calling
-`unsafe` functions or dereferencing raw pointers within a safe function.
+`unsafe` functions or dereferencing raw pointers within a safe function. Examples:
+
+```rust
+unsafe {
+ let b = [13u8, 17u8];
+ let a = &b[0] as *const u8;
+ assert_eq!(*a, 13);
+ assert_eq!(*a.offset(1), 17);
+}
+
+# unsafe fn f() -> i32 { 10 }
+let a = unsafe { f() };
+```
+
+[_InnerAttribute_]: attributes.html
+[_Statement_]: statements.html
+[_Expression_]: expressions.html