Bird
Raised Fist0
Cprogramming~20 mins

Register storage class - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Register Storage Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of code using register variable
What is the output of this C code snippet that uses a register variable inside a loop?
C
#include <stdio.h>

int main() {
    register int i;
    int sum = 0;
    for(i = 1; i <= 5; i++) {
        sum += i;
    }
    printf("%d", sum);
    return 0;
}
AUndefined behavior
B10
C15
DCompilation error due to register variable
Attempts:
2 left
💡 Hint
Remember that register variables are stored in CPU registers for faster access but behave like normal variables in this context.
❓ Predict Output
intermediate
2:00remaining
Effect of register keyword on address operator
What happens when you try to print the address of a register variable in C?
C
#include <stdio.h>

int main() {
    register int x = 10;
    printf("%p", (void*)&x);
    return 0;
}
ACompilation error: cannot take address of register variable
BPrints the memory address of x
CRuntime error
DPrints 0
Attempts:
2 left
💡 Hint
The register keyword restricts taking the address of the variable.
🔧 Debug
advanced
2:00remaining
Identify the error with register variable usage
What error will this code produce and why?
C
#include <stdio.h>

int main() {
    register int count = 5;
    int *ptr = &count;
    printf("%d", *ptr);
    return 0;
}
APrints 5
BCompilation error: cannot take address of register variable
CRuntime segmentation fault
DUndefined behavior but compiles
Attempts:
2 left
💡 Hint
Check if the address of a register variable can be taken.
🧠 Conceptual
advanced
2:00remaining
Behavior of register variables in recursive functions
Consider a recursive function using a register variable as a counter. What is the behavior of the register variable across recursive calls?
C
int factorial(int n) {
    register int count = 0;
    count++;
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}
AThe count variable is shared globally among all calls
BThe register variable count keeps incrementing across all recursive calls
CCompilation error due to register variable in recursion
DEach recursive call has its own separate register variable count initialized to 0
Attempts:
2 left
💡 Hint
Think about variable scope and lifetime in recursive calls.
❓ Predict Output
expert
2:00remaining
Number of items in a register variable array
What is the output of this code that declares a register array and prints its size?
C
#include <stdio.h>

int main() {
    register int arr[4] = {1, 2, 3, 4};
    printf("%lu", sizeof(arr)/sizeof(arr[0]));
    return 0;
}
ACompilation error: register variable cannot be an array
B4
C1
DUndefined behavior
Attempts:
2 left
💡 Hint
Check if arrays can be declared with register storage class.

Practice

(1/5)
1. What is the main purpose of the register storage class in C?
easy
A. To suggest storing the variable in CPU registers for faster access
B. To allocate memory on the heap
C. To make the variable global
D. To allow the variable to be accessed outside the function

Solution

  1. Step 1: Understand the role of register keyword

    The register keyword suggests to the compiler that the variable should be stored in CPU registers for faster access.
  2. Step 2: Compare with other storage classes

    Unlike global or heap variables, register variables are local and optimized for speed, not for scope or memory allocation.
  3. Final Answer:

    To suggest storing the variable in CPU registers for faster access -> Option A
  4. Quick Check:

    register means fast access [OK]
Hint: Remember: register means fast access in CPU registers [OK]
Common Mistakes:
  • Thinking register allocates memory on the heap
  • Assuming register variables are global
  • Believing register variables can be accessed outside functions
2. Which of the following is the correct syntax to declare a register variable in C?
easy
A. int count register;
B. int register count;
C. register = int count;
D. register int count;

Solution

  1. Step 1: Recall correct syntax for register declaration

    The correct syntax places the keyword register before the type: register int count;.
  2. Step 2: Check other options for syntax errors

    Options A, B, and C have incorrect order or invalid assignment syntax.
  3. Final Answer:

    register int count; -> Option D
  4. Quick Check:

    Keyword before type = correct syntax [OK]
Hint: Put 'register' before the type name [OK]
Common Mistakes:
  • Placing 'register' after the variable name
  • Using assignment '=' in declaration
  • Mixing order of type and storage class
3. What will be the output of the following C code?
void func() {
    register int x = 5;
    // printf("%p", &x); // Uncommenting this line causes error
    printf("%d", x);
}
int main() {
    func();
    return 0;
}
medium
A. Garbage value
B. Compilation error due to &x
C. 5
D. Runtime error

Solution

  1. Step 1: Understand register variable usage

    The variable x is declared as register int, so it cannot have its address taken.
  2. Step 2: Analyze the code behavior

    The commented line with &x would cause a compilation error if uncommented. But as is, the code prints the value of x, which is 5.
  3. Final Answer:

    5 -> Option C
  4. Quick Check:

    Printing register variable value works fine [OK]
Hint: Register variables can't use & but can print value [OK]
Common Mistakes:
  • Trying to print address of register variable
  • Expecting runtime error instead of compile error
  • Confusing garbage value with initialized value
4. Identify the error in the following code snippet:
void example() {
    register int a = 10;
    int *p = &a;
    printf("%d", *p);
}
medium
A. Register variable cannot be initialized
B. Cannot take address of register variable
C. Pointer declaration is invalid
D. No error, code runs fine

Solution

  1. Step 1: Check usage of register variable

    The variable a is declared as register int, so its address cannot be taken.
  2. Step 2: Identify the error in pointer assignment

    The line int *p = &a; tries to take the address of a register variable, which causes a compilation error.
  3. Final Answer:

    Cannot take address of register variable -> Option B
  4. Quick Check:

    Address of register variable forbidden [OK]
Hint: Register variables have no address, so & operator causes error [OK]
Common Mistakes:
  • Thinking register variables can't be initialized
  • Assuming pointer declaration is wrong
  • Believing code runs without error
5. Consider this code snippet:
void count() {
    register int i;
    for(i = 0; i < 3; i++) {
        printf("%d ", i);
    }
}
int main() {
    count();
    return 0;
}

What is the main advantage of using register for variable i here?
hard
A. It suggests faster access to i since it is frequently used
B. It allows taking the address of i inside the loop
C. It makes i a global variable
D. It automatically initializes i to zero

Solution

  1. Step 1: Analyze the role of register in loops

    Loop variables like i are used repeatedly, so storing them in CPU registers speeds up access.
  2. Step 2: Check other options for correctness

    It allows taking the address of i inside the loop is wrong because you cannot take the address of a register variable. It makes i a global variable is wrong because i is local, not global. It automatically initializes i to zero is wrong because register does not initialize variables.
  3. Final Answer:

    It suggests faster access to i since it is frequently used -> Option A
  4. Quick Check:

    Register = fast access for frequent vars [OK]
Hint: Register speeds up frequent variable access like loop counters [OK]
Common Mistakes:
  • Thinking register allows & operator
  • Assuming register makes variable global
  • Believing register initializes variables automatically
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard