-- 我看错了---
-----哦哦我看错了现在正确了
----但是为什么输入里面不能写change?
-----还有为什么输入里面printf("numa=%d,numb=%d",a,b); a和b前面不用加&了?
的确,新版本的编译器更聪明了
老师的风格就是这样,如果实在看不懂我建议先去看看指针相关的知识,然后回头看会更简单
等号右边*a表示取出指针a指向的数据,这里tmp就是整数类型,所以不需要加。换言之,tmp表示整数类型,*a也表示整数类型。造成这样的疑惑是因为对于*a在不同位置理解含义不同导致的:*a处于函数参数位置时,仅表示这里函数传参需要一个指针类型的变量;当*a处于等号右边时表示取出指针a代表的实际变量值。
return是返回值,看你自己的函数类型,void类型返回0,int类型返回你所需要的数值
vim下显示代码行号
main中定义的变量a,b是局部变量(我觉得,不一定对)
我不会,求大神给出代码
#include <stdio.h>
void swap(int *a, int *b); //交换两个数
#define size 10 //数组长度
int main()
{
int str[size];
int i, j;
//初始化数组为10 9 8 7 6 5 4 3 2 1
for (i = 0; i < size; i++)
{
str[i] = size - i;
}
//排序,从a[0]开始排,从小到大
for (i = 0; i < size; i++)
{
for (j = i + 1; j < size; j++)
{
if (str[i] > str[j])
{
swap(&str[i], &str[j]);
}
}
}
//将十个数输出
for (i = 0; i < size; i++)
printf("%d\n", str[i]);
return 0;
}
void swap(int *a, int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
你可以自己修改定义中的size的值确定长度,或者在语句中加入scanf函数获取都可以的。
如果你不给a和b值,他们是未定义行为,他们会给你随机数
按功能来讲应该是输入10个数据存入数组内,另外scanf的返回值是表示输入参数的个数,无效的输入返回0
多百度,百度这种问题都有解答的.要学会自己找答案哦.
因为change函数使用了void类型,void类型的有一个作用是无返回值的,表示该函数没有返回值,也就是说在change函数内部即使你把a和b的值互换了,但也只是对于这个函数本身,并不能影响到main函数的。
1/n 结果是int类型,所以除了当n=1时,1/1=1,其他情况1/2=0,1/3=0。。。所以永远无法满足sum<15这个条件。
合理。输出是change函数产生的,但是那个a b是change函数内部的变量,你也把它定义成c d,只是接收了最初定义的变量ab的值,并没有对之前定义的a b进行操作
我用的也是CentOS,有一些命令可能不一样,你百度查查看就可以了。
那就不是交换了,可以用另外一块内存区域覆盖改变值
因为函数参数的传递方式是单向值传递造成的。
调用 chang() 函数时,将实参 a 和 b 的值对应传递给形参 a 和 b,形参 a 和 b获得初值。当 chang() 函数执行结束,返回主函数时,形参 a和b 的内存空间被释放,即形参 a 和 b 不在存在。但是形参的值并没有传递给实参 a 和 b,所以实参 a 和 b 的值仍然是他们的初始值。
是不是 和别的一起编译了啊
不连续
主函数中加入printf(“%d,%d”,x,y);会报错;你定义的x,y的作用域于只在change函数里面可以用;
如果你把这句话加入到change内部就可以用了;
你有中间变量呀
因为传入的是地址(引用),所以不需要返回值。地址没有变,是地址里面的值变了。
是随机的,不一定是0
解决了,没compile导致运行是之前代码结果
vim