Computer >> Máy Tính >  >> Lập trình >> lập trình C

Sự khác biệt giữa const int *, const int * const và int const * trong C

Con trỏ

Trong ngôn ngữ lập trình C, * p đại diện cho giá trị được lưu trữ trong một con trỏ và p đại diện cho địa chỉ của giá trị, được gọi là một con trỏ.

const int * int const * nói rằng con trỏ có thể trỏ đến một hằng số int và giá trị của int được trỏ bởi con trỏ này không thể thay đổi. Nhưng chúng ta có thể thay đổi giá trị của con trỏ vì nó không phải là hằng số và nó có thể trỏ đến một hằng số int khác.

const int * const nói rằng con trỏ có thể trỏ đến một hằng số int và giá trị của int được trỏ bởi con trỏ này không thể thay đổi. Và chúng ta không thể thay đổi giá trị của con trỏ vì nó bây giờ là hằng số và nó không thể trỏ đến một hằng số int khác.

Quy tắc ngón tay cái là đặt tên theo cú pháp từ phải sang trái.

// constant pointer to constant int
const int * const
// pointer to constant int
const int *

Ví dụ (C)

Bỏ ghi chú các mã bị lỗi đã nhận xét và xem lỗi.

#include <stdio.h>
int main() {
   //Example: int const*
   //Note: int const* is same as const int*
   const int p = 5;
   // q is a pointer to const int
   int const* q = &p;
   //Invalid asssignment
   // value of p cannot be changed
   // error: assignment of read-only location '*q'
   //*q = 7;
   const int r = 7;
   //q can point to another const int
   q = &r;
   printf("%d", *q);
   //Example: int const* const
   int const* const s = &p;
   // Invalid asssignment
   // value of s cannot be changed
   // error: assignment of read-only location '*s'
   // *s = 7;
   // Invalid asssignment
   // s cannot be changed
   // error: assignment of read-only variable 's'
   // s = &r;
   return 0;
}

Đầu ra

7