Challenge - 5 Problems
Box Pointer Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output of this Rust code using Box pointer?
Consider the following Rust program that uses a Box pointer. What will it print when run?
Rust
fn main() {
let b = Box::new(5);
println!("{}", *b + 10);
}Attempts:
2 left
💡 Hint
Remember that Box stores the value on the heap and you need to dereference it to get the value.
✗ Incorrect
The Box pointer b holds the value 5 on the heap. Using *b dereferences it to 5, then adding 10 results in 15.
❓ Predict Output
intermediate2:00remaining
What happens when you try to move a Box pointer?
What will be the output or result of this Rust code?
Rust
fn main() {
let b1 = Box::new(7);
let b2 = b1;
println!("{}", *b1);
println!("{}", *b2);
}Attempts:
2 left
💡 Hint
Box pointers have ownership semantics. Moving them invalidates the original variable.
✗ Incorrect
When b1 is moved to b2, b1 is no longer valid. Using b1 after move causes a compile-time error.
🔧 Debug
advanced2:00remaining
Why does this Box pointer code cause a compilation error?
Identify the error in this Rust code and what causes it.
Rust
fn main() {
let b = Box::new(10);
let r1 = &b;
let r2 = &mut b;
println!("{} {}", r1, r2);
}Attempts:
2 left
💡 Hint
Rust enforces borrowing rules: you cannot have mutable and immutable borrows at the same time.
✗ Incorrect
The code tries to borrow `b` immutably and mutably at the same time, which Rust forbids.
❓ Predict Output
advanced2:00remaining
What is the output of this recursive Box pointer example?
What will this Rust program print?
Rust
enum List { Cons(i32, Box<List>), Nil, } fn main() { let list = List::Cons(1, Box::new(List::Cons(2, Box::new(List::Nil)))); match list { List::Cons(x, box List::Cons(y, box List::Nil)) => println!("{} {}", x, y), _ => println!("No match"), } }
Attempts:
2 left
💡 Hint
Pattern matching with Box requires unboxing with `box` keyword.
✗ Incorrect
The pattern matches the nested Box structure correctly and prints the two values 1 and 2.
🧠 Conceptual
expert2:00remaining
Why use Box pointer in Rust for recursive types?
Which is the main reason to use Box pointer for recursive data types in Rust?
Attempts:
2 left
💡 Hint
Rust needs to know the size of types at compile time. Recursive types without indirection have unknown size.
✗ Incorrect
Box allocates data on the heap, giving the enum a fixed size pointer, enabling recursive types to compile.