关于数组函数的疑问
int n, score[STU][COURSE], sum[STU], pos;
long num[STU], x;
float aver[STU];
这是前面的变量声明
void Input(long num[],int score[][COURSE],int n);
这是自定义函数的函数声明
void Input(long num[], int score[][COURSE], int n)
{
int i, j;
for (i=0; i<n; i++)
{
scanf("%ld", &num[i]);
for (j=0; j<COURSE; j++)
{
scanf("%d", &score[i][j]);
}
}
}
这是自定义函数的内容
鄙人想请教的是对于这样的无返回值函数,形参和实参一样的吗
[解决办法]
C,C++数组在参数传递的时候,传递的是指针;
如果在函数里,改变这个指针的值,则不能修改实参,除非采用C++引用传递。
如果修改数组元素,因为这其实就是通过指针,修改指针指向的对象;
所以实参数组的的每个元素可以被改变。
从参数传递的角度考虑,除了C++的引用传递,可以改变实参本身以外;
C,C++的其他方式都是值传递,实参本身是不会被修改的,值传递是单向的。
PS:
指针参数值传递,可以改变数组元素,不可以改变指针本身。
[解决办法]
形参是形参,实参是实参,不一样。调用函数的时候是把实参复制了一份传给了形参,在子函数里改变形参的值并不会改变实参的值,如果需要在子函数里改变实参的值,需要传实参的地址进去,对实参的地址进行取值访问,然后对这个结果进行赋值就可以改变实参的值。
[解决办法]
如果是我,将数组声明为全局变量,函数无参数,直接读写全局数组变量。