C语言中关于指针和++的有关问题。
C语言中关于指针和++的问题。。
关于*p++的问题!!!
软件使用VC++6.0!!!
程序如下:
int main(void)
{
int a = 1,b,m;
int *p = &a;
b = *p + 5;
m = *p++;
printf("%d %d %d %d %d\n",b,m,p,&a,*p);
return 0;
}
输出:6 1 1638216 1638212 1638212
查了一些资料,*p++本质是*(p++),即先考虑p++!而p++计算时,先使用p的值。因此考虑*p,*p=1,赋值m,所以m=1!!接着,将p所存的内容加1,应该为1638213啊,不知道1638216如何得出!!
同时,*p的值又是如何确定的???
------解决方案--------------------
指针+1,加的是对应数据类型的长度
比如int型指针+1,加的是一个int的长度,也就是4,而不是1
------解决方案--------------------
我来指出一个问题和回答一个问题吧。
指出的问题是(!!接着,将p所存的内容加1)你把m=*p++后面过程理解错了。正解是这样的,实现m=*p,之后p指针自加一,因为你定义p是int型指针,那么p++就相当于(地址p)=(地址p)+(4bit),结果就是p还是一个地址,并且指向了下一个int型数据,而不是将p中的内容加1。
回答(*p的值又是如何确定的):这么跟你解释吧,当计算机运行程序时,代码汇编成机器语言放在代码段(内存)中,而程序中的数据放在数据段(内存)中,当你定义int a=1是系统就在数据段中按照一定的算法找到不用的4bit地址,擦除它原来的数据重新赋值为2(注意是先擦除后赋值)。所以当p++之后p就指向了接下来的4bit地址,注意这个地址中的数据是没有擦除的(我们不知道有或者没有),总之它是一个随机数,因此*p的值是个随机数。
希望能帮到你,不用谢。
关于*p++的问题!!!
软件使用VC++6.0!!!
程序如下:
int main(void)
{
int a = 1,b,m;
int *p = &a;
b = *p + 5;
m = *p++;
printf("%d %d %d %d %d\n",b,m,p,&a,*p);
return 0;
}
输出:6 1 1638216 1638212 1638212
查了一些资料,*p++本质是*(p++),即先考虑p++!而p++计算时,先使用p的值。因此考虑*p,*p=1,赋值m,所以m=1!!接着,将p所存的内容加1,应该为1638213啊,不知道1638216如何得出!!
同时,*p的值又是如何确定的???
------解决方案--------------------
指针+1,加的是对应数据类型的长度
比如int型指针+1,加的是一个int的长度,也就是4,而不是1
------解决方案--------------------
我来指出一个问题和回答一个问题吧。
指出的问题是(!!接着,将p所存的内容加1)你把m=*p++后面过程理解错了。正解是这样的,实现m=*p,之后p指针自加一,因为你定义p是int型指针,那么p++就相当于(地址p)=(地址p)+(4bit),结果就是p还是一个地址,并且指向了下一个int型数据,而不是将p中的内容加1。
回答(*p的值又是如何确定的):这么跟你解释吧,当计算机运行程序时,代码汇编成机器语言放在代码段(内存)中,而程序中的数据放在数据段(内存)中,当你定义int a=1是系统就在数据段中按照一定的算法找到不用的4bit地址,擦除它原来的数据重新赋值为2(注意是先擦除后赋值)。所以当p++之后p就指向了接下来的4bit地址,注意这个地址中的数据是没有擦除的(我们不知道有或者没有),总之它是一个随机数,因此*p的值是个随机数。
希望能帮到你,不用谢。