Understanding the Difference Between const char * and char * const in C

Nov 23, 2025 · Programming · 6 views · 7.8

Keywords: C programming | pointers | constants

Abstract: This article provides an in-depth analysis of the distinctions between const char * and char * const in C programming, illustrating their syntax, behavior, and practical applications through code examples, and discusses best practices for using const qualifiers with pointers to enhance code safety and clarity.

Basic Concepts of Pointers and const Qualifiers

In C programming, the const keyword is used to define constants, but its placement relative to pointers leads to significantly different semantics. Understanding the difference between const char * and char * const is crucial for writing secure and maintainable code.

const char *: Pointer to Constant Character

const char * declares a pointer to a const char, meaning the character value pointed to cannot be modified, but the pointer itself can be reassigned to a different memory address. For example:

const char *ptr = "Hello";
ptr = "World";  // Valid: pointer can be changed
// *ptr = 'A';  // Invalid: cannot modify the character value

This form is commonly used in function parameters to prevent accidental modification of string data. The equivalent notation char const * is also widely adopted, with both being semantically identical.

char * const: Constant Pointer

char * const declares a constant pointer to a char, meaning the pointer's value (i.e., the address it holds) cannot be changed, but the character value it points to can be modified. For example:

char str[] = "Hello";
char * const ptr = str;
*ptr = 'A';  // Valid: can modify the character value
// ptr = "World";  // Invalid: pointer cannot be reassigned

This type of pointer is similar to a reference in C++, as it remains fixed to one object after initialization, suitable for scenarios requiring stable memory access.

const char * const: Constant Pointer to Constant Character

Combining both forms, const char * const declares a constant pointer to a constant character, meaning neither the pointer nor the character value can be modified. For example:

const char * const ptr = "Immutable";
// ptr = "Other";  // Invalid: pointer is constant
// *ptr = 'X';      // Invalid: character value is constant

This provides the highest level of protection, ensuring complete immutability of both the data and the access path.

Code Conventions and Best Practices

To avoid confusion, many coding standards recommend consistently using the char const * form, placing const on the right side of the type it modifies. This consistency improves readability, especially in complex pointer declarations. For example:

char const *ptr1;      // Pointer to constant character
char * const ptr2;     // Constant pointer
char const * const ptr3; // Constant pointer to constant character

In practice, choose the appropriate declaration based on data protection needs to ensure code robustness and security.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.