30/09/2018, 17:44

Tại sao có thể viết char *a="Tai sao?";

Đã nhiều lần mình sử dụng chuỗi kí tự hằng gán cho một con trỏ kí tư. Nhưng không hiểu tại sao lại có thể gán được như vậy:
Ví dụ:char *a="tel my why!";
Đúng ra là biến con trỏ a kia, nó phải tham chiếu(trỏ) tới địa chỉ của đối tượng kiểu char chứ?Chuỗi hằng trên đâu phải là địa chỉ của bộ nhớ đâu?Mọi người giải thích giúp mình với!

Nguyễn Văn Tâm viết 19:50 ngày 30/09/2018

Ở đây a là con trỏ kiểu char còn “tell my why!” là hằng xâu kí tự n sẽ nằm trong vùng nhớ hằng. Phép gán này chỉ đơn giản là bạn cho con trỏ a trỏ tới địa chỉ của vùng nhớ đó thôi.

Đại Dương viết 19:49 ngày 30/09/2018

chuỗi hằng đó nằm trong vùng nhớ data của chương trình đúng không bạn?
vậy thì có thể int *p=10;được không bạn?
p/s: sao hỏi ngớ ngẩn vậy?

Chi Ngo viết 19:52 ngày 30/09/2018

"tel my why!" là một mảng ký tự và việc bạn gán như trên chính là cho con trỏ a trỏ tới địa chỉ của phần tử đầu tiên trong mảng ký tự đó.

For a brighter future! http://chingovan.blogspot.com

Nguyễn Văn Tâm viết 19:55 ngày 30/09/2018

Không. Vì vế phải là một số kiểu int. p là một con trỏ kiểu int.

*grab popcorn* viết 19:47 ngày 30/09/2018

Haha, đó ko phải là một câu hỏi ngớ ngẩn đâu
char *p = value;
Tức gán địa chỉ con trỏ p địa chỉ value.
Thì string nó đặc biệt ở chỗ, khi char *p = “value”;
nó tự động tạo cái chuỗi kia trong vùng nhớ hằng. (constant memory)
Sau đó mới gán địa chỉ của giá trị đó cho cái giá trị kia.
Còn kiểu khác thì nó auto mặc định value = địa chỉ luôn
nên float *p = 10; tức gán đỉa chỉ 10 cho con trỏ p.
Còn float *p = 10.1; là bị compiler nó chửi cho mà nghe -_-

Nguyễn Hữu Điền viết 20:00 ngày 30/09/2018

char *a="tel my why!"; là phép gán địa chỉ cho con trỏ kiểu char nên hoàn toàn hợp lý, còn int *a = 10; là gán số nguyên cho con trỏ nên không hợp lệ vì giá trị con trỏ nắm giữ là địa chỉ, muốn gán được số 10 cho con trỏ a thì phải cấp phát bộ nhớ cho a, mình cũng không biết diễn đạt ý muốn nói như nào nữa .


Bài liên quan
0