...={1,2,,3,4,5,6,7,8,9,0},*p; p=a; printf("%x\n",p); printf...
发布网友
发布时间:2024-10-24 18:54
我来回答
共3个回答
热心网友
时间:2024-10-30 21:31
我的结果是(每个电脑的结果有可能不一样):
12ff58
12ff7c
你的程序应该是:
#include <stdio.h>
void main( )
{
int a[]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9);
}
程序注释:p指针指向数组a,那么p就是数组a的起始地址12ff58,那么p+9就是数组中元素a[9]的地址。因为每个整型数是四字节,所以a[9]的地址是p+4*9,写成16进制就是12ff7c。
热心网友
时间:2024-10-30 21:28
你的程序的确很绕啊。但是在我想了一下换是明白了。:
你只要把你每次改变b记下来就明白了
我给你说10吧
28也是一样的
首先b
=
2;
之后fun函数传过去了a[2]的地址就是3
,经过运算函数返回了b的值是5
,在接着就是
b=fun(&a[i])+b;这句
最后b就被改写成了10了
最后输出就是10
第二次循环b的值是10
不是2
这个关键的
那28也就是这个道理了。明白了吧!!
这里我就是说一下为什么第一次循环是10
因为你的程序只是运行了一次,所以b的初始化只经过一次。要想在变成2,就要重新运行程序,这时候b在进行初始化,变成2.好了就这样了!!!希望对你有用!
希望对你能有所帮助。
热心网友
时间:2024-10-30 21:26
printf("%x\n",p); //p指向a[0],其值为地址值,这个值由操作系统管理,人不能确定。
printf("%x\n",p+9); //p+9的值应该比p的值大36,因为,在32编译系统中,整型占四个字个。第9个整型元素应该在第0个元素后面4*9=36字节。