首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个*与++一起的有关问题

2012-04-09 
一个*与++一起的问题#includestdio.hvoid main(){int a1,b,c, *p&ab*p++c(*p)++printf(%d,%d,%d

一个*与++一起的问题
#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
[解决办法]
噢 ,我在回帖的时候,有高人先回了,没看到,呵呵!

热点排行