C Assignment Explained: Basics to Advanced for Beginners

目次

1. What is Assignment in C?

C programming treats assignment as a fundamental yet extremely important operation. Assignment is used to set a value to a variable. It is the first step to ensure the program behaves as intended. For example, see the following code.
int a = 5;
This code defines an integer variable a and assigns the value 5 to it. In this way, assignment means the operation of associating a variable with a value.

Purpose of Assignment

  • Storing Data: Store data used within the program.
  • Preparing Operations: Perform calculations or processing based on the stored data.

What Happens Without Assignment?

If assignment is not performed correctly, the variable may contain an invalid value known as an “indeterminate value,” causing the program to behave unexpectedly.

2. Basics of Assignment Operators

Assignment operators are the fundamental means for performing assignment. In C, the most basic assignment operator is =.

How Assignment Operators Work

An assignment operator assigns the value on the right-hand side to the variable on the left-hand side. Below is a concrete example.
int x = 10;  // assign 10 to x
int y = x;   // assign the value of x to y (y becomes 10)
In the above example, after assigning the value 10 to x, the value of x is assigned to y.

Compound Assignment Operators

In C, compound assignment operators are provided for more efficient assignment. They allow you to perform an operation on a value while simultaneously assigning it.
  • Operators: +=, -=, *=, /=, %=
  • Example
int a = 5;
a 3;  // same as a = a + 3 (a becomes 8)
a *= 2;  // same as a = a * 2 (a becomes 16)
Using compound assignment operators allows you to write code more concisely.

Bitwise Assignment Operators

In C, assignment operators can also be used for bitwise operations.
  • Operators: &=, |=, ^=
  • <strongexample< strong=””></strongexample<>
int b = 6;  // 6 is 110 in binary
b &= 3;     // b = b & 3 (b becomes binary 010, i.e., 2)
Bitwise operations are extremely useful when manipulating specific bits.

3. Differences Between Initialization and Assignment

In C, “initialization” and “assignment” may seem similar but are distinct concepts. Understanding their roles enables more efficient program design.

What Is Initialization

Initialization refers to the operation of defining a variable and setting its value at the same time. In other words, it’s the process of “creating a variable while giving it a value.”

Example of Initialization

int x = 10;  // Define variable x and set its value to 10
float y = 3.14;  // Set y to a floating-point value
In this example, both x and y are declared and assigned values simultaneously.

Characteristics of Initialization

  • Performed only once at the point of declaration.
  • Not strictly required, but recommended to avoid uninitialized variables.

What Is Assignment

Assignment is the operation of setting a new value to an already declared variable. Unlike initialization, it can be performed any number of times throughout a program.

Example of Assignment

int x;  // Define variable x (not initialized)
x = 5;  // Assign the value 5 to x
x = 10; // Change x's value to 10
In this example, after declaring x, the value 5 is assigned, followed by assigning the value 10.

Characteristics of Assignment

  • Can be performed after initialization or at any point during program execution.
  • Allows the value of the same variable to be updated repeatedly.

Differences Between Initialization and Assignment

ItemInitializationAssignment
TimingOnly at declarationCan be performed anywhere in the program
CountOnly oncePossible multiple times
NecessityNot required but recommendedRequired as needed
Exampleint a = 10;a = 20;

Example Combining Initialization and Assignment

Below is a code example that combines initialization and assignment.
#include <stdio.h>

int main() {
    int a = 5;  // Initialization
    printf("Initial value: %d\n", a);

    a = 10;  // Assignment
    printf("New value: %d\n", a);

    return 0;
}
Output:
Initial value: 5
New value: 10

Choosing Between Initialization and Assignment

  1. When Initialization Is Appropriate:
  • When you set a value immediately after declaring a variable.
  • When you want to prevent errors caused by uninitialized variables.
  1. When Assignment Is Appropriate:
  • When the initial value needs to be updated later.
  • When you want to change the value dynamically within a loop.

4. Differences Between Assignment and Equality Operators

C language has distinct purposes for the assignment operator (=) and the equality operator (==). Because the symbols look similar, they are easy to confuse, which is a common mistake for beginners. This section explains the differences and proper usage in detail.

What is the Assignment Operator (=)

The assignment operator is used to assign the value on the right-hand side to the variable on the left-hand side. It is the fundamental operator used to set or update a variable’s value.

Example of Assignment Operator

int x;
x = 10;  // assign the value 10 to variable x
In this example, x is assigned the value 10.

Notes

  • The assignment operator is used to “set a value”.
  • Multiple assignments can be chained.
int a, b;
a = b = 5;  // assign 5 to variable b, then assign b's value to a

What is the Equality Operator (==)

The equality operator is used to compare whether the values on both sides are equal. The comparison result is returned as a logical value (true or false).

Example of Equality Operator

int x = 10, y = 20;
if (x == y) {
    printf("x and y are equal\n");
} else {
    printf("x and y are not equal\n");
}
In this example, it checks whether x and y are equal and displays different messages based on the result.

Notes

  • The equality operator is used to “compare values”.
  • The comparison result returns true (1) or false (0).

Errors Caused by Confusing Assignment and Equality

Confusing the assignment operator with the equality operator can lead to unintended program behavior. Below is a typical example.

Common Mistake

int a = 5;
if (a = 10) {  // using the assignment operator
    printf("The condition is evaluated as true\n");
}
In this example, a = 10 assigns 10 to variable a, causing the if condition to be evaluated as true.

Corrected Example

int a = 5;
if (a == 10) {  // using the equality operator
    printf("a is equal to 10\n");
} else {
    printf("a is not equal to 10\n");
}

Tips for Distinguishing Assignment and Equality

  1. Judge by Context:
  • Use = when you want to set a value to a variable.
  • Use == when you want to compare values.
  1. Use Parentheses:
  • When using assignment in a condition, enclose it in parentheses to make the intent clear.
if ((a = 10)) {  // this is recognized as an explicit assignment
    // code to execute when the condition is true
}
  1. Enable Compiler Warnings:
  • Enabling compiler warnings helps detect unintended assignments.

Summary Comparison of Assignment and Equality

ItemAssignment Operator (=)Equality Operator (==)
PurposeSet a value to a variableCheck whether values are equal
UsageAssigning a value to a variableComparison in conditional expressions
Examplea = 10;a == 10
Result of MisuseValue gets changed unintentionallyConditional expression does not behave as intended

Practical Example

The following code demonstrates the correct use of assignment and equality.
#include <stdio.h>

int main() {
    int a = 5, b = 10;

    // compare using equality operator
    if (a == b) {
        printf("a and b are equal\n");
    } else {
        printf("a and b are not equal\n");
    }

    // set value using assignment operator
    a = b;
    printf("new value of a: %d\n", a);

    return 0;
}
Output
a and b are not equal
new value of a: 10

5. Relationship Between Pointers and Assignment

One of the distinctive features of the C language, “pointers,” is closely related to assignment. Understanding pointers is essential for memory manipulation and efficient programming. This section provides a detailed explanation of the basic concepts of pointers and their relationship with assignment.

What Is a Pointer

A pointer is a special variable that stores the address (memory location) of another variable. While ordinary variables hold the value itself, a pointer holds the address where that value is stored.

Pointer Declaration and Example Usage

int a = 10;
int *p;  // Declare an integer pointer p
p = &a;  // Assign the address of a to p
Here, the address of variable a is assigned to pointer p. You can manipulate the value of a indirectly through p.

Assigning to Pointer Variables

When assigning to a pointer variable, you need to specify the address of a variable. This uses the address operator (&).

Assignment Using the Address Operator

int b = 20;
int *q;
q = &b;  // Assign the address of b to q
In this example, the address of variable b is assigned to pointer q. q functions as a pointer that points to the value of b.

Manipulating Values Using Indirect Dereferencing

To manipulate a variable’s value through a pointer, you use the indirect operator (*). Using the indirect operator allows you to reference and modify the value at the address pointed to by the pointer.

Example of Indirect Dereferencing

int x = 30;
int *ptr = &x;

printf("x value: %dn", x);  // display x's value
*ptr = 50;  // change x's value via ptr
printf("x value after change: %dn", x);
Output
x value: 30
x value after change: 50
Here, the value of variable x is directly modified through pointer ptr.

Cautions When Initializing and Assigning Pointers

Using a pointer without initializing it is dangerous. An uninitialized pointer points to an unknown address, which can cause the program to behave unexpectedly.

Example of an Uninitialized Pointer

int *p;
*p = 10;  // causes an error

Solution

  • Always initialize a pointer before using it.
  • Assign NULL to pointers that are not initialized.
int *p = NULL;  // Initialize pointer with NULL
if (p != NULL) {
    *p = 100;  // safe to use
}

Passing Values Between Functions Using Pointers

Pointers are also useful for passing values between functions. By passing a pointer to a function, you can directly manipulate the caller’s variable.

Example of a Function Using Pointers

#include <stdio.h>

void updateValue(int *n) {
    *n = 42;  // change value via indirect dereference
}

int main() {
    int num = 10;
    printf("value before change: %dn", num);
    updateValue(&num);  // pass the address of num
    printf("value after change: %dn", num);

    return 0;
}
Output
value before change: 10
value after change: 42
Here, the function updateValue uses a pointer to directly modify the caller’s variable num.

6. Points to Note When Assigning

When performing assignment operations in C, there are several points to keep in mind to obtain correct results. In particular, extra care is needed when dealing with integer types or pointers. This section provides a detailed explanation of the main considerations related to assignment.

1. Data Type Compatibility and the Need for Casting

In C, if the data types of variables do not match, the assignment may not be performed correctly. Special attention is required when assigning between integer and floating-point types, or between integer types of different sizes.

Example: Issues Caused by Data Type Differences

int a;
float b = 3.14;

a = b;  // assign floating-point to integer type
printf("value of a: %dn", a);  // result becomes 3 (fractional part is truncated)
In this example, when a float value is assigned to an int type, the fractional part is truncated.

Solution: Use Casting

Using a cast allows you to intentionally convert the type.
int a;
float b = 3.14;

a = (int)b;  // explicit type conversion
printf("value of a: %dn", a);  // result is 3
Using a cast clearly indicates that the type conversion is intentional by the programmer.

2. Problems Caused by Using Uninitialized Variables

If a variable is used without being initialized, it may contain unpredictable (garbage) values. Assignment operations using such variables can cause unexpected behavior.

Example: Using an Uninitialized Variable

int x;
printf("value of x: %dn", x);  // undefined value is printed
The uninitialized variable x contains a random value, which makes the program’s behavior unpredictable.

Solution: Initialize Variables

Initializing variables at the point of declaration prevents this issue.
int x = 0;
printf("value of x: %dn", x);  // x's value is 0

3. Prohibition of Assigning to Constants or Read-Only Variables

Variables declared with the const modifier cannot be assigned a value. Attempting to assign to such variables results in a compile error.

Example: Assigning to a const Variable

const int a = 5;
a = 10;  // compile error
The const modifier makes the variable a read-only.

Solution

If you need to modify the value, remove the const modifier or use a different variable instead.

4. Pointer Operations That Can Cause Segmentation Faults

When using pointers for assignment, attempting to access an invalid address can cause a segmentation fault (program crash).

Example: Assigning to an Invalid Pointer

int *p;
*p = 10;  // assign to uninitialized pointer (may crash)

Solution

  • Initialize the pointer.
  • Assign a valid address before performing operations.
int x = 5;
int *p = &x;
*p = 10;  // safe assignment

5. Restrictions on Assigning Arrays and Strings

In C, you cannot assign an entire array or string directly.

Example: Direct Assignment to an Array

int arr1[3] = {1, 2, 3};
int arr2[3];
arr2 = arr1;  // compile error

Solution

Use the memcpy function to copy the contents of an array.
#include <string.h>

int arr1[3] = {1, 2, 3};
int arr2[3];

memcpy(arr2, arr1, sizeof(arr1));  // copy contents of arr1 to arr2

Summary of Assignment Considerations

ConsiderationSummarySolution
Data type mismatchUnexpected value conversion or loss of information occursUse casting
Use of uninitialized variableContains unpredictable valuesInitialize variables
Assigning to const variableCannot assign to read‑only valuesUse a non‑const variable
Invalid pointer operationAccess to invalid addressThoroughly initialize pointers
Array/string assignment restrictionsCannot assign entire array directlyUse memcpy

7. Summary

In this article, we provided a comprehensive explanation of assignment in C, covering basics to advanced topics. Assignment is an essential operation in programs, and understanding its correct usage helps prevent errors and leads to efficient coding. In this section, we review the article and organize the key points.

Article Review

  1. Basics of Assignment Operators
  • = is the operator that sets the value of the right-hand side to the variable on the left-hand side.
  • Using compound assignment operators (+=, -=, etc.) allows you to write code more concisely.
  1. Difference Between Initialization and Assignment
  • Initialization occurs when a variable is declared, whereas assignment changes the value after declaration.
  • If you forget to initialize, errors can occur due to undefined values.
  1. Difference Between Assignment and Equality Operators
  • The assignment operator (=) sets a value, while the equality operator (==) compares whether values are equal.
  • To avoid this confusion, you need to understand the syntax precisely.
  1. Pointers and Assignment
  • Using pointers allows you to manipulate a variable’s address directly.
  • Using uninitialized pointers or invalid addresses can cause the program to crash.
  1. Things to Watch Out for When Assigning
  • Mismatched data types, uninitialized variables, assigning to const variables, and invalid pointer operations can cause errors.
  • To prevent these, proper initialization and type casting are important.

The Importance of Proper Assignment Operations

Understanding and mastering assignment operations improves code readability and maintainability. It also helps prevent errors and bugs before they occur, enhancing the reliability of your programs.

8. Frequently Asked Questions (FAQ)

Q1. What happens if you use a variable in C without initializing it?

Uninitialized variables contain indeterminate (garbage) values, which can cause unpredictable behavior. For example, using them in a conditional expression can lead to unintended results.

Q2. Why is the assignment operator “=”, while the equality operator is “==”?

This is a design choice in the C language. The “= ” and “==” are defined to have different meanings to distinguish assignment from comparison. Understanding this distinction clearly is important.

Q3. How do you change a variable’s value using a pointer?

When using a pointer, you assign the variable’s address to the pointer and use the indirect dereference operator (*) to modify the value. Example:
int x = 10;
int *ptr = &x;
*ptr = 20;  // The value of x is changed to 20

Q4. What are the advantages of compound assignment operators?

Using compound assignment operators (e.g., +=, *=) makes the code more concise and improves readability. It also reduces redundancy, lowering the chance of errors.

Q5. In what situations do you use bitwise assignment operators?

Bitwise operations (e.g., &=, |=) are used for setting or clearing bit masks and manipulating specific bits. They are especially useful in hardware control and low‑level programming.
年収訴求