c语言之指针疑难问题
编译器Visual C++ 6.0
1.
#include <stdio.h> int main() { int i = 10; char *p = (char *)(0x0018FF44); *p = NULL;return 0; }
说明:0x0018FF44是i的地址;
运行完后,p 的值为0x0018FF44; *p的值为0;
2.
#include <stdio.h> int main() { //int i = 10; char *p = (char *)(0x0018FF44); *p = NULL;
return 0; }
只是注释变量i
运行完后,p 的值为0x0018FF00; *p的值为0;
3.
#include <stdio.h> int main() { int i = 10; int *p = (int *)(0x0018FF44); *p = NULL; return 0; }
p的类型修改为int *;
运行完后,p的值为0x0018FF44; *p的值为0;
4.
#include <stdio.h> int main() { //int i = 10; int *p = (int *)(0x0018FF44); *p = NULL; return 0; }
仅仅将i注释掉
运行完后,p的值为变为0x00000000;*p的值未知;
问题:
1.为什么变量I注释前后的结果不同?
2.为什么对于*p赋值,指针变量p的值也变化了?
3.为什么对于char*类型的指针,修改的是内存地址的低地址?
青青园中葵,朝露待日晞。
阳春布德泽,万物生光辉。
常恐秋节至,焜黄华叶衰。
百川东到海,何时复西归?
少壮不努力,老大徒伤悲!