Tại sao con trỏ kiểu char lại trỏ được tới kiểu int?

có ai giải thích cho em cái phần này với

int a = 257;
char *cp = (char *)&a;

cout << *cp; 

a là 1 int thế mà con trỏ lại là char mà vẫn chạy
khi chạy lại ra cái mặt cuwoif nhưng đổi giá trị của a đi thì lại không có gì ạ :smile:

cái này

int a = 257; // Ở đây a có giá trị là 257 có kiểu là nguyên

char *cp = (char *)&a; // còn đầu tạo một con trỏ cp con 
trỏ này có kiểu (char) trỏ tới địa chỉ của (&a) mà a là một số nguyên 
nên ta ép kiểu về (char*)

còn in ra thì ra một kí tự (*cp) là lấy ra giá trị mà nó đang trỏ tới…có kiểu là (char)

1 Like

cái này là ép kiểu của con trỏ, hay ở chỗ có thể ép kiểu con trỏ về tất cả các kiểu con trỏ khác nhau, ví dụ như struct chẳng hạn. :smile:

code đầy đủ của bạn là thế này, ép con trỏ *pa về kiểu char, lưu vào con trỏ mới *cp:

int a = 257;
int *pa = &a;
char *cp = (char *)pa;

là do cmd không hiển thị đc chứ k phải là k có gì đâu. bạn thử làm 1 vòng for cho a chạy từ 1 đến 256 xem, chú ý a = 1, 65, 66… nhé, có liên quan tới bảng mã ASCII hay dùng để xử lí xâu kí tự đấy. :wink:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?