函数返回值与预期不同

时间:2016-08-24 12:06:28

标签: c

我无法理解正在发生的事情。第二个令牌的值是一些随机数而不是1.为什么第二个令牌的值不是函数中的值?

SELECT AttendanceCode, AttendanceDescription
FROM journalattendancestatus
ORDER BY (CASE WHEN AttendanceDescription= 'Present' THEN 1 ELSE 0 END) DESC

2 个答案:

答案 0 :(得分:4)

C使用pass-by-value进行函数参数传递。

在您的代码中,import scipy.constants as sc import numpy as np import matplotlib.pyplot as plt lhinm = 10000 # Highest wavelength in nm T = np.linspace(200, 1000, 10) # Temperature in K l = np.linspace(0, lhinm*1E-9, 101) # Wavelength in m ll = np.linspace(0, lhinm*1E-9, 6) # Axis values labels = np.linspace(0, lhinm, 6) # Axis labels giving l in nm B = (2*sc.h*sc.c**2/l[:, np.newaxis]**5)/(np.exp((sc.h*sc.c)/(T*l[:, np.newaxis]*sc.Boltzmann))-1) for ticks in [True, False]: plt.plot(B) plt.xlabel("Wavelength (nm)") if ticks: plt.xticks(ll, labels) plt.title("With xticks()") plt.savefig("withticks.png") else: plt.title("Without xticks()") plt.savefig("withoutticks.png") plt.show() 按值传递,因此在函数内对其进行的任何更改都不会反映给调用者。

您期望的是以下代码

second.token

打印10,这根本不可能。 (如果你打电话为void change( int x) { x = 10; } int main(void) { int p = 5; change(p); printf("%d\n", p); return 0; } 想象恐怖。)

解决方案:

您不需要单独传递第二个参数。您已经将指针传递给包含枚举变量的结构,只需使用指针更改被调用函数中的值,然后在调用者中打印结构变量的枚举成员的值。

答案 1 :(得分:0)

struct player
{
char name[20];
enum cell token;
unsigned score;
};


BOOLEAN init_player2(struct player *second, enum cell token)
{
    second->token= 1;
}

int main()
{
    struct player second;
    init_player2(&second, second.token);
    printf("The value of second token is: %d\n", second.token);

    return 0;
}

你只需要使用指针在函数内部使用变量来改变值。