Code Bye

关于使用指针的一个问题

/*找出10个数中最小值,与第一个数互换位置*/
#include <stdio.h>
void main()
{
int a[10] = { 9,4,5,6,1,10,2,3,7,8 };
int *p, i, *t;
p = a;
for (i = 0; i < 10; i++)
{
if (*p > a[i])
p = &a[i];
}
t = &a[0]; a[0] = *p; p = t;
for (i = 0; i<10; i++)
printf(“%d “, a[i]);
printf(“\n%d,%d\n”, *t, *p);
}
本人输出出来的结果却是这样的。求指导答一下,谢谢大家啦!
解决方案

50

#include <stdio.h>
void main()
{
	int a[10] = { 9,4,5,6,1,10,2,3,7,8 };
	int *p, i, t;
	p = a;
	for (i = 0; i < 10; i++)
	{
		if (*p < a[i])
			p = &a[i];
	}
	t = a[0]; a[0] = *p; *p = t;
	for (i = 0; i<10; i++)
		printf("%d ", a[i]);
}

100

1.if (*p > a[i])你这样变成找最大值了
2.t = &a[0]; a[0] = *p; p = t;你这三句也没法交换值
你让t指向a的第一个元素,然后将p指向的元素的值赋值给a[0],然后p指向t(也就是指向了a[0])?
这三句造成的效果仅仅就是a[0]的值被修改了
代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于使用指针的一个问题