Tóm lại là thế này:
tương đương với
Chữ const đó chứng tỏ nó là một hằng số và hằng số không thể đưa vào toán tử ++
Khi tiến hành char * const p = "hello world" thì chữ hello world được nằm trong một vùng nhớ riêng (mình chả biết nó tên gì, mà tên cũng không quan trọng, Tuấn Anh nó nói rồi) vùng nhớ này chứa các giá trị được ghi thẳng vào trong file code lúc lập trình. Nó được được nạp vào một chỗ riêng biệt trong bộ nhớ, gọi là vị trí X đi chẳng hạn. Và chương trình không được phép truy xuất vào vùng X này. Dĩ nhiên có thể có biện pháp hay cơ chế đặc biệt nào đấy nhưng mình không quan tâm, chưa bao giờ có nhu cầu làm việc kỳ quặc đó.
Khi thực hiện gán bằng thì với biến kiểu con trỏ C chỉ chép phần địa chỉ của vùng nhớ tức là p bây giờ mang giá trị X và các thao tác thay đổi giá trị của vùng nhớ X sẽ dẫn đến lỗi "segmentation fault".
Nhưng nếu p khai báo là mảng thì C hiểu ta muốn khởi tạo mảng nên nó sẽ tạo một vùng nhớ khác ở vị trí Y, copy chữ hello world từ chỗ X vào Y và cho p mang giá trị Y.
PHP Code:
char p[]
PHP Code:
char* const p
Khi tiến hành char * const p = "hello world" thì chữ hello world được nằm trong một vùng nhớ riêng (mình chả biết nó tên gì, mà tên cũng không quan trọng, Tuấn Anh nó nói rồi) vùng nhớ này chứa các giá trị được ghi thẳng vào trong file code lúc lập trình. Nó được được nạp vào một chỗ riêng biệt trong bộ nhớ, gọi là vị trí X đi chẳng hạn. Và chương trình không được phép truy xuất vào vùng X này. Dĩ nhiên có thể có biện pháp hay cơ chế đặc biệt nào đấy nhưng mình không quan tâm, chưa bao giờ có nhu cầu làm việc kỳ quặc đó.
Khi thực hiện gán bằng thì với biến kiểu con trỏ C chỉ chép phần địa chỉ của vùng nhớ tức là p bây giờ mang giá trị X và các thao tác thay đổi giá trị của vùng nhớ X sẽ dẫn đến lỗi "segmentation fault".
Nhưng nếu p khai báo là mảng thì C hiểu ta muốn khởi tạo mảng nên nó sẽ tạo một vùng nhớ khác ở vị trí Y, copy chữ hello world từ chỗ X vào Y và cho p mang giá trị Y.
Comment