Arrays allow storing multiple values of the same type under a common name. One-dimensional arrays use a single subscript to access elements, while multi-dimensional arrays use multiple subscripts. Strings are arrays of characters terminated by a null character. Functions allow breaking programs into modular reusable units. Functions can take arguments, return values, or do both. Variables declared inside functions have automatic storage, while those outside have external storage. Arrays and strings can be passed to functions. Recursion occurs when a function calls itself.