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*类型的指针,修改的是内存地址的低地址?

猜你喜欢

转载自www.cnblogs.com/weiyouqing/p/12890881.html