一剑飘零 发表于 2022-1-15 20:24

C中函数的形参必须要用指针才行吗?

本帖最后由 一剑飘零 于 2022-1-15 21:00 编辑

一个简单的数字前后位置互换,很奇怪为什么传不了值?有的函数为什么可以传值?新手勿喷。#include <stdio.h>
int huhan(int a,int b);
int huhan(int a,int b){
      int temp;
      temp = a;
      a=b;
      b=temp;
      return a,b;
}
int main()
{
      int a = 5,b =6;
huhan(a,b);   //就算我写:huhan(5,6); 这样还是不行,就是不执行互换。难道真的只有指针才行吗?
printf("a=%d,b=%d",a,b);

return 0;
}



输出:a=5,b=6
我想要的是a=6,b=5.

zfl 发表于 2022-1-15 20:38

别纠结了 ,确实要用指针{:301_997:}

zjpggbond 发表于 2022-1-15 20:39

第八行应该是b=temp吧

zjpggbond 发表于 2022-1-15 20:40

b赋了两次值了

shineben 发表于 2022-1-15 20:43

第一:函数返回值只能是1个,不能返回2个,除非用指针
第二:huhan和main两个函数的变量a,b是个自的,不是同一个,你在main里面输出肯定都是main里面的a,b,仔细去看看auto变量的有效范围

平淡最真 发表于 2022-1-15 20:45

int huhan(int &a,int &b)引用传递也行

一剑飘零 发表于 2022-1-15 21:00

zjpggbond 发表于 2022-1-15 20:39
第八行应该是b=temp吧

确实。哈哈,眼真尖。

zxl1227 发表于 2022-1-15 21:07

这两种形参
传地址(&a,字符串,&a等作指针)
      在函数中使用传地址是可以记录(传递)值(此处的值就是进行所在函数运算后的值)
传变量(a,b等)
      特征就是无法记录(传递值),无论函数中发生什么运算了,他返回仍然是原值


ps   你的具体问题中我再提醒一点交换值,你用指针时候,交换记得这样交换
(下面为函数部分,main部分我就不写了)
int temp;
temp=*p;
*p=*q;
*q=temp;


不能这样交换(函数中设一个指针)三个指针进行交换
下面是错的
int *temp;
temp=p;
p=q;
q=temp;


一剑飘零 发表于 2022-1-15 21:15

本帖最后由 一剑飘零 于 2022-1-15 21:34 编辑

zxl1227 发表于 2022-1-15 21:07
这两种形参
传地址(&a,字符串,&a等作指针)
      在函数中使用传地址是可以记录(传递)值(此处的值 ...
谢谢。感谢指点。

平淡最真 发表于 2022-1-15 21:27

一剑飘零 发表于 2022-1-15 21:15
谢谢。就是想知道有没有不用指针的方法可以调用传递函数的值。

不是好几个人回你吗?   用引用的方法{:1_909:}
页: [1] 2 3
查看完整版本: C中函数的形参必须要用指针才行吗?