一个*与++一起的问题
#include<stdio.h>
void main()
{
int a=1,b,c, *p=&a;
b=*p++;
c=(*p)++;
printf("%d,%d,%d",a,b,c);
}
大家试下输出多少,为什么这样啊
[解决办法]
这样用指针十分危险
对于c的值是不确定的
一般编译器也会报指针越界,不知道楼主想研究什么?
[解决办法]
我机器的运行结果:
2, 2, 2293680
Terminated with return code 0
Press any key to continue ...
首先,++的优先级要高于* ,然后指针自加,指向了 a 后的一个字节的内存,然后将这个内存的值自加并赋值给c,所以c中的值是不确定的
[解决办法]
#include <stdio.h>
void main()
{
int a=1,b,c, *p=&a;
b=*p++;
c=(*p)++;
printf( "%d,%d,%d ",a,b,c);
}
输出1,1,1310656
而#include<stdio.h>
void main()
{
int a=1,b,c, *p=&a;
//b=*p++;
c=(*p)++;
printf("%d,%d",a,
c);
}
输出的是2,1
为什么第一个程序a不变而第二个a变了
[解决办法]
sorry,忘记说明了,在我的机器上,a被我改成2了,嘿嘿
如果把b那行注释掉,那p指向的就是a的内存空间了,而这又是一个后加加,所以会先对c进行赋值,然后执行p指向的那块内存的自加,也就是a
[解决办法]
- C/C++ code
main() { int a=1, b, c, *p = &a; //初始化p指向a,*p = a = 1;// b=*p++; c=(*p)++; //这里由于是对(*p)进行自加操作,而且是右加 //首先,c = *p = a = 1,然后对(*p)进行自加(*p)++ = 1+1 = 2,p是 //指向a的,所以a的值就被修改为2,注意若此时c = *p++,则仍然是1,一切源 //于你在*p上加了括号,改变了原来的运算顺序 printf( "%d,%d ",a,c); }
[解决办法]
#include <stdio.h>
void main()
{
int a=1,b,c,*p=&a;
b=*p++; // *p先赋值给b,然后p++,此时p不再是指向a;
c=(*p)++; // 此句把*p看成一个整体,此时把*p赋值给c也就是把p的地址解引用后赋值给c,然后再把p解引用后的值++;
printf("%d,%d,%d",a,b,c);
}
输出1,1,1310656
而#include <stdio.h>
void main()
{
int a=1,b,c,*p=&a;
//b=*p++; // 把此句注销了,此时p就仍然指向a;
c=(*p)++; // 把*p赋值给c,也就是把a赋值给c,然后*p自加,也就是a加1;
printf( "%d,%d",a,
c);
}
输出的是2,1
[解决办法]
噢 ,我在回帖的时候,有高人先回了,没看到,呵呵!