C语言指针求救

来源:百度知道 编辑:UC知道 时间:2024/06/18 17:41:13
C语言指针求救,初学,......这样的程序居然也行?
main()
{int *p,*f,i;
f=p; /*让f和p都指向同一个位置*/
for(i=1;i<=5;i++)
scanf("%d",p++);
for(i=1;i<=5;i++)
printf("%d",*f++);
}
输出结果完全是对的,他不是数组,但是对他也可以使用p++操作,这是为什么,很多人不是说,在数组外使用p++等无意义吗?书上还说定义指针变量p后,没有对p赋任何地址,就往地址里赋值,是不行的,为什么我这个可以,我没给p定义任何地址,我就让那里输入数值,而且往里面存,而且p++在数组之外也可以???为什么?

这和编译器有关,你的p一开始是有值的,编译器把它指向一块合法的内存,也就是用户可以访问的内存。不赋初值的话有可能对这个地址里有用的东西造成覆盖而发生很严重的错误。有的编译器不是这样,没赋初值时指向一块非法内存。你直接用会出错。

p是指针 就是指向地址的
其实就是地址。数组是是取了连续一段地址的数
上面p和数组已经没什么区别了。

这只能说明你很幸运。但是程序经不起长时间的检测,只是偶尔正确。
程序运行时,系统要你的程序分配内存空间,如果内存资源丰富的话,那个p,f有可能指向系统空闲内存块,这时程序就凑巧对了一把。

p++;可以看成&p [i];i++;取的地址…然后自加…指向下一个地址…指针和数组是可以通用的…
*f++;也可以看成f[i];i++;这是对取f指向的值.然后自加…