enchanted 发表于 2018-6-6 23:51:20

函数传递

为什么运行完n_value(n);后,n还是等于0

不应该是323吗

大蟒蛇吃饭团 发表于 2018-6-6 23:51:21

因为你n_value里的n和外面的n是2个n
你在调用n_value(n)的时候其实是复制了n的值给这个函数
你有2种方法解决,要么把n的地址传进去n_value(&n)
然后n_value方法要这样写
void n_value(int *n)
{
    *n = p * q;
}
或者你让n_value返回一个int这样的话可以写 n = n_value(n)
然后n_value方法要这样写
int n_value(int n)
{
    return (p * q)
}

BngThea 发表于 2018-6-7 06:58:45

n_value函数里面的n和main函数里面的n是两个不同的n

理想小青年 发表于 2018-6-8 13:47:26

本帖最后由 理想小青年 于 2018-6-8 13:48 编辑

#include <stdio.h>

void n_value(int n);
const unsigned long p = 17;
const unsigned long q = 19;
int main(void)
{
        int n = 0;
        n_value(n);      //没有返回值n依旧是int n = 0;
        printf("%d",n);      //结果n = 0
        return 0;
}

void n_value(int n)
{
        n = p * q;
        printf("%d\n",n);      //结果n = 323
        //return n;      //return n;把323返回到int man函数,这时候两个n都是323
}

wa_junye 发表于 2018-6-8 14:35:16

要&n,这样是地址传递可以改变实参的值
直接传递n是值传递,不改变实参的值

Mr.HO 发表于 2018-6-9 00:34:23

你修改是形参的数值。应该是取N的地址,然后函数参数是int *n

enchanted 发表于 2018-6-12 16:54:44

大蟒蛇吃饭团 发表于 2018-6-6 23:51
因为你n_value里的n和外面的n是2个n
你在调用n_value(n)的时候其实是复制了n的值给这个函数
你有2种方法 ...

#include<iostream>
using namespace std;
const unsigned long p=17;
const unsigned long q=19;

void n_value(int *n)
{
        *n=p*q;
}
int main()
{
        int *n;
        int a;
        n=&a;
        n_value(n);
        cout<<a;
        cin.get();
        return 0;
}
页: [1]
查看完整版本: 函数传递