C语言指针函数 求救

来源:百度知道 编辑:UC知道 时间:2024/05/17 16:25:50
main()
{int *p,a,i;
p=&a;
for(i=1;i<=5;i++)
scanf("%d",p++);
for(p=&a,i=1;i<=5;i++)
printf("%d",p++)
}
为什么我这样使用指针变量,输出的结果是完全一样的? 不是说在数组之外不能用p++等操作吗? 不是说不能够这样使用指针变量吗?
输出函数写漏了一个 * 符号,

程序是错的!
首先要知道,数组a[],各元素的地址是连续的。
当a定义为数组时a[5],那么系统会给数组分配一个连续(物理上是连续的)的存储空间。这样将p=a,就是将数组的首地址赋予了指针p,然后p++就是指向了连续地址的下一个元素地址,是合法的。
但是,如果a不是数组,(如你的程序),p=&a,将变量a的地址赋予了指针。这时,你p++,就指向了与整型变量a物理上相连的下一个地址,但是,这个地址系统没有预先分配,那么就不知道是否可用,所以,不能p++。

可以p++ 就是&a的下一个地址哈!

a的值没有变化(a 初值系统只给一次)..所以*p就没有变了

可以用p++ .它就类似于.数组里的下标自动加1

多看书..当然这些知识我不推荐看tan hao qiang 的..看其它版本的.如电子工业出版的等等

我可以很明白的告诉你。。
数组其实就是指针。。
!!!!!
指针一样可以当数组那样用不信你试试看p[0]可是也能输出。
数组就是指针,它指向了数组的开头第一个元素。!!!
楼主注意了。

之所以说不能这样用p++是因为会发生越界访问,a是整型变量,但你并不知道其后单元存储的信息是否有用,强行访问并修改其后单元的内容,有可能带来安全隐患和重大的错误.最好别这么用。

顶楼上的,你这个程序确实有问题。定义变量时a应该是数组就对了,比如int a[5],这样才能正确调用。另外,当正确定义了之后。
数组名和指针变量还是有区别的:
1.非形参数组名是指针常量,而不是指针变量,在学习数组的时候,应该了解 到 ,数组名就是这个数组的首地址,所以p=a与p=&a[0]作用是相同的。二维数组就有区别,这我就不说了
2.形参数组是指针变量
所以,也可以片面理解为数组的作用相当指针,但是决不能说数组就是指针