Các sư huynh cho em hỏi, khi debug đoạn code sau thì kết quả xuất ra là : -1 3 0 0
có thể giải thích cho em lí do tại sao không?
int x = 1023;
char *p = (char *)&x;
printf(“%d %d %d %d\n”, p[0], p[1], p[2], p[3]);
Các sư huynh cho em hỏi, khi debug đoạn code sau thì kết quả xuất ra là : -1 3 0 0
có thể giải thích cho em lí do tại sao không?
int x = 1023;
char *p = (char *)&x;
printf(“%d %d %d %d\n”, p[0], p[1], p[2], p[3]);
chú ý giới hạn kiểu dữ liệu . hết
mục đích của bài này là gì?
Gắn cái địa chỉ của cái biến int vào cái biến con trỏ rồi in nội dung của biến con trỏ theo cách in mảng
mảng 1 chiều là 1 con trỏ chứ không có chuyện con trỏ là mảng 1 chiều nên không thể in được con trỏ theo cách in mảng được, vì giá trị của con trỏ sẽ bằng với địa chỉ của phần tử đầu tiên trong mảng nên ta chỉ in được phần tử đầu tiên trong mảng thôi
int x = 5;
char *p = (char *)&x;
printf("%d", p[0]); //in ra 5
mình cho x = 5 vì kiểu char có kích thước nhỏ hơn kiểu int nên khi ép kiểu thì giá trị biến x phải nằm trong giới hạn của kiểu char
bài này là 1 bài tập nhỏ thầy cho mình về làm rồi bảo giải thích lí do thôi
mình chưa hiểu ý lắm, giải thích cách ép kiểu hay muốn hiểu sâu về con trỏ, thầy bạn mà giải đáp thì giải thích cho mình biết vs nhé
1023 =
00000000 00000000 00000011 11111111 (2)
Ép kiểu = lấy số byte tương ứng với kiểu đó từ thấp tới cao.
Như trên là char ->1 byte là ta lấy 11111111 = -1
p[1] = ô nhớ tiếp theo, do kiểu char nên chỉ lấy 1 byte = 00000011 = 3
còn lại 2 ô kia ko có gì thì in ra 0
p[0] phải bằng 255 chứ sao lại bằng -1 vậy
11111111 = 255
unsigned char sẽ là 255
kiểu char có miền giá trị từ -128 đến 127 sao 11111111 lại bằng -1 nhỉ?
Bạn tìm hiểu cách máy tính lưu trữ số âm là rõ.
[enter link description here]
(http://www.stdio.vn/articles/read/5-ban-chat-cua-bien-trong-cc)nãy giờ đang đọc cái này cũng hiểu được chút chút
để đọc tiếp link của bạn xem sao. tks
Bạn này nói đúng nội dung 9 của vấn đề. Còn cách in đúng chưa thì chưa biết
Cái này có học nhưng lâu quá không dùng nen quên rồi