C语言高手请看下面。。
#include<stdio.h>voidexch(int*t){t[0]=t[5];}main(){intx[10]={1,2,3,4,5,6,7,8,9,10};in...
#include<stdio.h>
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.这中间我哪里理解错了。忘高手好好指导指导,这个没搞懂饭都吃不下去,在此大谢了,感激不尽。 展开
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.这中间我哪里理解错了。忘高手好好指导指导,这个没搞懂饭都吃不下去,在此大谢了,感激不尽。 展开
5个回答
展开全部
你的问题是这样的
1、写成exch(&x[i]),这样写是将x[i]这个元素的地址传递给函数,例如当i=2,那么函数所做的交换为x[2]=x[7],你可以理解为函数收到了一个以x[i]开始的数组,并将这个数组的第一个元素和第六个元素进行交换。
2、写成exch(x),实际上等价于exch(&x[0]),也就是函数要做的始终是将原数组的第一个元素和第六个元素进行交换,如果交换次数为奇数次,那么就会得到你说的结果,为偶数次,则数组不发生变化
关于中间传递地址值的问题,这个是指针传值的基础知识,如果函数的参数为指针,则在传值的时候需要对相应的参数赋予变量地址,这样指针才能定位到具体的内存单元,从而读取你想传递的数据。一个数组,如果仅仅给出数组名,那么就是给出了该数组的第一个元素的地址。而由于数组是连续存储的,所以如果将一个数组中某个元素的地址传递给指针,那么指针所能访问的是该元素以及该元素之后所有元素所组成的数组
当然你这个函数是有一定的危险性的,因为数组可能会越界,而指针并不会受到数组长度的限制,因此可能会对内存中的其他数据造成影响,应避免使用指针
1、写成exch(&x[i]),这样写是将x[i]这个元素的地址传递给函数,例如当i=2,那么函数所做的交换为x[2]=x[7],你可以理解为函数收到了一个以x[i]开始的数组,并将这个数组的第一个元素和第六个元素进行交换。
2、写成exch(x),实际上等价于exch(&x[0]),也就是函数要做的始终是将原数组的第一个元素和第六个元素进行交换,如果交换次数为奇数次,那么就会得到你说的结果,为偶数次,则数组不发生变化
关于中间传递地址值的问题,这个是指针传值的基础知识,如果函数的参数为指针,则在传值的时候需要对相应的参数赋予变量地址,这样指针才能定位到具体的内存单元,从而读取你想传递的数据。一个数组,如果仅仅给出数组名,那么就是给出了该数组的第一个元素的地址。而由于数组是连续存储的,所以如果将一个数组中某个元素的地址传递给指针,那么指针所能访问的是该元素以及该元素之后所有元素所组成的数组
当然你这个函数是有一定的危险性的,因为数组可能会越界,而指针并不会受到数组长度的限制,因此可能会对内存中的其他数据造成影响,应避免使用指针
展开全部
你如果不进行while循环,exch那一句函数只执行一次,就是你说的那种结果了 6 2 3 4 5,但是由于有循环相当于 x[0] = x[5], x[1] = x[6]... 所以前面五个元素都进行了替换。 另外你exch函数写成这样你每次需要向里面传递一个指针,即数组的首地址。
追问
谢谢,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
exch(&x[i])是传递具体的数组元素的地址给函数。
exch(x[i])是传递数组的首地址给函数。不管i是0还是4,到函数里就是会变为首地址。因为用数组进行传递时,会自动转换为首地址指针,跟下标没关系。
exch(x[i])是传递数组的首地址给函数。不管i是0还是4,到函数里就是会变为首地址。因为用数组进行传递时,会自动转换为首地址指针,跟下标没关系。
追问
懂了,谢谢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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]
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]
追问
懂了,谢谢了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-24
展开全部
不知道你写这个程序是想实现什么东西?1 2 3 4 5 6 7 8 9 10 变成 6 7 8 9 10 1 2 3 4 5?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询