TRT
Sign in
easyFoundationsconcept

Does a function receive your variable or a copy of it?

Explain arguments against parameters, pass by value, scope, lifetime, and the split between declaration and definition.

TRT practice prompt — not a verified question from a named employer.

The Runtime Theory Team2 min read
Learn it firstFunctions: Parameters, Return Values and ScopeDefine and call functions, follow an argument as it is copied into a parameter and a value comes back, and learn how declarations, scope and lifetime decide which variable a name refers to.

A strong answer

A strong candidate frames Does a function receive your variable or a copy of it? around the exact memory layout, compiler semantics, and hardware execution model covered in Functions: Parameters, Return Values and Scope. Explain arguments against parameters, pass by value, scope, lifetime, and the split between declaration and definition.

Programs grow. The same few lines appear in several places, a bug has to be fixed in each copy, and main becomes a wall of statements with no names for the ideas inside it. A function solves this by packaging code under a name. It takes inputs, does a job, and gives back a result:

The questions are all about what happens at the boundary: what travels into the function, what comes back, and what happens to the function's variables when it ends.

In a production interview, always connect the specification rule to its concrete runtime consequence: state what lives on the stack versus the heap or static storage segment, how the compiler or operating system validates alignments, lifetimes, and error codes, and what happens under adversarial or boundary inputs (such as zero-length buffers, integer overflow, concurrent mutation, or partial I/O). Backing your explanation with a small trace of register/memory state transitions immediately separates senior systems engineers from candidates who only memorized syntax.

What the interviewer is listening for

  • Mastery of core invariant: Distinguish parameters from arguments and describe what happens to an argument during a call.
  • Mastery of core invariant: Predict whether a change to a parameter affects the caller's variable.
  • Mastery of core invariant: Explain the difference between declaring and defining a function.
  • Hardware and ABI awareness: Explaining how sizes, alignments, calling conventions, or kernel boundaries behave on real 64-bit targets rather than relying on implementation-defined assumptions.
  • Defensive engineering: Naming the exact compiler flags (-Wall -Wextra -Werror), static analyzers, or runtime sanitizers (-fsanitize=address,undefined,thread) that verify correctness in CI.

Common mistakes

  • Explaining only surface syntax without tracing the underlying memory addresses, ownership lifetime, or kernel/user-space state transitions.
  • Assuming undefined behavior (such as signed overflow, uninitialized reads, strict-aliasing violations, or dangling pointers) will "just work" because it passed an unoptimized -O0 debug build.
  • Ignoring return codes, partial reads/writes, alignment padding, or cleanup paths when an allocation or syscall fails midway through a function.

This answer walks

Practice follow-ups

  1. 01How can two functions each declare a variable named n without any conflict?

Not started

Sign in to save your learning progress.

Sign in to save