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!
Bài liên quan
Ở đâ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.
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?
"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
Không. Vì vế phải là một số kiểu int. p là một con trỏ kiểu int.
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 -_-
char *a="tel my why!";
là phép gán địa chỉ cho con trỏ kiểuchar
nên hoàn toàn hợp lý, cònint *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 .