C语言高手请看下面。。
解决时间 2021-02-10 21:00
- 提问者网友:原来太熟悉了会陌生
- 2021-02-10 05:06
#include
void exch(int *t)
{t[0]=t[5];
}
main()
{int x[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
while(i<=4)
{
exch(&x[i]);i++;//这里传送第i个元素的地址值是什么意思啊,有点不懂.
}
for(i=0;i<5;i++)
printf("%d,",x[i]);
printf("\n");
}
开始的时候数组是这样排列的1 2 3 4 5 6 7 8 9 10,自己认为当i=0执行过后数组元素变成这样的:6 2 3 4 5 6 7 8 9 10,当i=1,2,3,4执行过后数组元素变成这样的:6 2 3 4 5 6 7 8 9 10。自己认为最后运行结果是:6 2 3 4 5.可是程序运行结果为什么等于6 7 8 9 10。有点蒙。如果把这句exch(&x[i]);改成exch(x);的话程序运行结果就是才是6 2 3 4 5.这中间我哪里理解错了。忘高手好好指导指导,这个没搞懂饭都吃不下去,在此大谢了,感激不尽。
最佳答案
- 五星知识达人网友:西风乍起
- 2021-02-10 05:20
你的问题是这样的
1、写成exch(&x[i]),这样写是将x[i]这个元素的地址传递给函数,例如当i=2,那么函数所做的交换为x[2]=x[7],你可以理解为函数收到了一个以x[i]开始的数组,并将这个数组的第一个元素和第六个元素进行交换。
2、写成exch(x),实际上等价于exch(&x[0]),也就是函数要做的始终是将原数组的第一个元素和第六个元素进行交换,如果交换次数为奇数次,那么就会得到你说的结果,为偶数次,则数组不发生变化
关于中间传递地址值的问题,这个是指针传值的基础知识,如果函数的参数为指针,则在传值的时候需要对相应的参数赋予变量地址,这样指针才能定位到具体的内存单元,从而读取你想传递的数据。一个数组,如果仅仅给出数组名,那么就是给出了该数组的第一个元素的地址。而由于数组是连续存储的,所以如果将一个数组中某个元素的地址传递给指针,那么指针所能访问的是该元素以及该元素之后所有元素所组成的数组
当然你这个函数是有一定的危险性的,因为数组可能会越界,而指针并不会受到数组长度的限制,因此可能会对内存中的其他数据造成影响,应避免使用指针
全部回答
- 1楼网友:舍身薄凉客
- 2021-02-10 07:30
简单的说么,你少了个双引号,仔细看,scanf那 max函数返回值类型也打错了。另外max函数定义后面不要加分号。
- 2楼网友:洒脱疯子
- 2021-02-10 06:50
exch(&x[i])是传递具体的数组元素的地址给函数。
exch(x[i])是传递数组的首地址给函数。不管i是0还是4,到函数里就是会变为首地址。因为用数组进行传递时,会自动转换为首地址指针,跟下标没关系。
- 3楼网友:舊物识亽
- 2021-02-10 06:44
i=0执行后:*6 2 3 4 5 *6 7 8 9 10
i=1:6 *7 3 4 5 6 *7 8 9 10
i=2:6 7 *8 4 5 6 7 *8 9 10
i=3:6 7 8 *9 5 6 7 8 *9 10
i=4:6 7 8 9 *10 6 7 8 9 *10
前面加星号的是每次的t[0]和t[5]
- 4楼网友:由着我着迷
- 2021-02-10 06:32
你如果不进行while循环,exch那一句函数只执行一次,就是你说的那种结果了 6 2 3 4 5,但是由于有循环相当于 x[0] = x[5], x[1] = x[6]... 所以前面五个元素都进行了替换。 另外你exch函数写成这样你每次需要向里面传递一个指针,即数组的首地址。
我要举报
大家都在看
推荐资讯