Chào mn, cho em hỏi có ai có tài liệu hay web nào nói về vấn đề trên không cho em xin với (e đã dò google khá kỹ, hiểu sơ sơ như ví dụ dưới đây), e đang muốn hiểu rõ ràng hơn, hoặc có thể giải thích cho em . Xin cảm ơn nhiều lắmmmmm ( ám ảnh cưỡng chế nhẹ).
#include <stdio.h>
int main(){
int n = 260, *p=&n;
printf("n= %d\n",n);
char *pp = (char*)p;
*pp=0;
printf("n= %d",n);
getchar();
return 0;
}
Đây là giải thích của em:
p = &n ;*p = n = 260;
(kiểu int)
- In ra màn hình giá trị (kiểu int) của n =260
pp = p = &n; *pp = *p = n = 260;
Xem xét con trỏ pp:
-
Con trỏ pp kiểu char => chỉ trỏ được một phạm vi 256 giá trị (-128 -> 127)
=> *pp bị overflow, pp trỏ qua phạm vi giá trị tiếp theo (vẫn thuộc biến n)
=> *pp lúc này có giá trị kiểu int là 4 (phần giá trị tràn ra) -
Câu lệnh gán *pp = 0 tác động lên phạm vi giá trị đó.
=> n = 256 ( mất 4) -
In ra màn hình (kiểu int) giá trị của n: n = 256 + 0
=> Màn hình hiển thịn=260 \n n=256