关于指针的问题,大虾们!!帮帮忙·

都是INTp是一个指针哈,a[10]如果P的初值为&a[0]则:p+i和a+i就是a[i]地址,或则说,他们指向a数组的第i个元素。这里需要特别注意的是a代表数组首元素的... 都是INT p是一个指针哈,a[10]
如果P的初值为&a[0]则:
p+i和a+i就是a[i]地址,或则说,他们指向a数组的第i个元素。这里需要特别注意的是a代表数组首元素的地址,a+i也是地址,它的计算方法同p+i,即它的实际地址为a+i乘以d(d的意思是字节数,如int占2个字节,则乘以2),p+9和a+9的值是&a[9],它指向a[9]。
为什么???p+i和a+i就是a[i]地址??
我想说的是,p是一个指针,并且是一个地址,为什么p+9和a+9的值是&a[9],因为P是一个地址,要得到&a[9]的地址,应该是加上18啊!因为INT的嘛。哪里错了??如:P首地址为:0000,那么要得到&a[9]就应该是0018啊!!!对不??
看这个程序:
#include <stdio.h>
void main()
{int a[10];
int *p,i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(p=a;p<(a+10);p++)这一行就是不理解a+10,为什么不加20,假如它的首地址是0000
printf("%d ",*p);
}
#include <stdio.h>
void main()
{ int *p,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);这是一个输入函数,这句什么意思,是在键盘上输入地址吗??
printf("\n");
p=a;
for(i=0;i<10;i++,p++) 这一行可以改成这样不:
printf("%d ",*p);
}
如下:
for(i=0;i<10;i++)
{ p++;
printf("%d ",*p);
展开
 我来答
百度网友9280015c42
2011-03-23
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
你的分析很正确,但也很错误。
int 的大小取决于编译器,比如在纯C语言编译器TC2.0中,int 只占2个字节,但在VC&C-free这种C&C++编译器中,int 是占4个字节的。除了这些,你的理解还是很好的!

再来分析你的程序问题——for(p=a;p<(a+10);p++)这一行就是不理解a+10,为什么不加20,假如它的首地址是0000
这里应该这样看,(a+10) 是不是等于 a[10]?是。那么你的程序里面只是定义了 int a[10]; 怎么能加20呢?这里引用一楼的回答"+号对于指针运算不是简单的代数运算,而是使指针指向下一个地址。"对于指针你要注意它的类型,如"int, char"。他们的作用就是让指针可以像常数一样使用“+ -”的。 建议你再看看指针的那一章,在理解理解,其实指针不难!

"scanf("%d",p++);这是一个输入函数,这句什么意思,是在键盘上输入地址吗??" 晕,我建议你再看看C语言先。这里不是要你输入地址,而是输入数。P就是地址了。p++只是在你输入完一个数后,它会移动到下一个地址,好接受你输入的第二个数。

for(i=0;i<10;i++,p++) 这一行可以改成这样不? 可以,但前提是你的数组刚好也为10个。

说一点题外话,你应该在多看看书,多提问。有问题不要先问别人,自己先想想。
如果你是学生,那么图书馆是你最好的去处。
如果你是自学的,那我得佩服你,希望你尽快掌握。
847882986
2011-03-21 · TA获得超过759个赞
知道小有建树答主
回答量:1109
采纳率:100%
帮助的人:264万
展开全部
第一个问题,因为+号对于指针运算不是简单的代数运算,而是使指针指向下一个地址。这也是为什么我们要指定指针所指向对象的类型。“+”运算符是有很多种功能的。

第二个问题,不用解释了吧。

第三个问题,不是在键盘上输入地址,你想,假如我们不用指针变量,那么在scanf函数中我们是不是应该用一个“取地址符&”,所以,scanf函数需要的参数就是一个地址,所以用的指针变量p。不是输入地址,而是把输入的数据赋给p所指向的数组元素。

第四个问题,可以这样改的。

来自XMU SOFTWARE。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-21
展开全部
指针加、减时加、减的是指针的类型的字节数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rossfrank
2011-03-21 · 超过32用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:95.4万
展开全部
int a = 100;
int * p = & a;
p = p + 1;
if address of a is 0x1000, after p ++, p pointer to 0x1004 since:
1:) p 是指向int类型的指针, 对p的加操作, 意味着+4 byes 因为大多数32平台上int占4个字节.
随便找本c语言方面的书,都会讲这个.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Fanix5
2011-03-23
知道答主
回答量:19
采纳率:0%
帮助的人:8.2万
展开全部
;这是一个输入函数,这句什么意思,是在键盘上输入地址吗??这个是取地址给p,p++是指向下一个地址;*p是指p指向地址的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式