军用bkt开山刀:一个C语言程序

来源:百度文库 编辑:神马品牌网 时间:2024/04/25 14:14:08
#include<stdio.h>
void main()
{ int i=50,*p1=&i,*p2=&j;
*p1++;printf("%d",*p1);
(*p1)++;printf("%d",*p1);
}
这个程序的输出结果是什么啊?并且说说原因.还有main前面怎么要加void啊?谢谢了!
可是我运行后的有结果啊,而且结果是:
60 61

int *p1 = &i;这句写成int* p1 = &i;可能容易理解一点,就是声明一个指向int型变量的指针,并赋初值,令其指向整型变量i。

*p1++时,++比*的优先级高,所以这句实际上是*(p1++),即p1指向i后面的一个整型数据,而实际上程序中在i之后并没有定义整型数据,这块内存区域是不确定的,因此会打印出一个随机的整数。

(*p1)++时,因为上面执行了p1++,p1指向了i后面的内存区域,程序会把这块区域的内容当做一个整型数据处理,对其加1。因此会打印一个比刚才打印的整数大1的整数。

这个编译可能通不过吧。j没有定义,怎么能使用?
加void是C++的要求,在C中,main()不需要用这个字修饰的,但在C++中也要求main()前加修饰。我还记得好象标准的C++编译器要求是int main().

无法确定,最后的结果可能会导致导弹发射吧~
void 代表main没有返回值,加了void在有些编译器上通不过(在我的gcc.exe上就通不过,它必须要求加int,最后再return 一个值,一般是0)。

这个程序用不到p2,而且j没有声明,*p2=&j 在这里编译通不过,所以我们可以把它去掉。

程序改写成下面这样好懂些。

#include<stdio.h>
void main()
{ int i=50,*p1=&i;
(*p1)++;printf("%d\n",*p1);
*p1++;printf("%d",*p1);
}

*p1=&i 的声明使*p1的值等于 i 即等于50
(*p1)++; 就是 *p1 = *p1 + 1;
等于51
*p1++; 是 *(p1+1)的值, 没有定义。

main()是函数,返回值给系统。
加 void 就是送返 “没有东西”(NULL)

无法确定

打印的是i的地址加1和i的地址加2