![]() |
#2
反脑控20162016-10-11 20:37
第一,这不是java语言。
第二,如果是C/C++语言,这是传引用。 函数的参数传递方式 传值方式 实参必须是常量、有确定值的变量或有确定值的表达式,而形参必须是变量。 函数调用时,给形参分配内存空间,将实参的值拷贝给形参,之后的函数执行中形参和实参就脱离了关系,谁都不影响谁。 实参与形参的数据类型应该一致,如果不一致,编译器将实参转换为所需类型,如果不能进行转换,将发生“类型不匹配”错误。 #include <iostream> using std::cout; using std::endl; using std::ends; void swap(int,int); void main() { int a=15,b=8; swap(a,b); cout<<"a="<<a<<ends<<"b="<<b<<endl;//a=15 b=8 } void swap(int x,int y) { int temp; temp=x; x=y; y=temp; } 传址方式 情况一:对变量的操作 #include <iostream> using std::cout; using std::endl; using std::ends; void swap(int*,int*); void main() { int a=15,b=8; swap(&a,&b); cout<<"a="<<a<<ends<<"b="<<b<<endl;//a=8 b=15 } void swap(int*x,int*y) { int temp; temp=*x; *x=*y; *y=temp; } 情况二:以一维数组的形式处理一维数组 #include <iostream> using std::cout; using std::endl; double average(double array[], int count); int main(void) { double values[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; cout <<average(values, (sizeof values)/(sizeof values[0])) << endl;//5.5 return 0; } double average(double array[], int count)//形参表中数组名值可以被改变 { double sum(0.0); for(int i = 0; i < count; i++) sum += array[i];// 可以改为sum += *array++; return sum/count; } 情况三:以指针形式处理一维数组 #include <iostream> using std::cout; using std::endl; double average(double* array, int count); int main(void) { double values[] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 }; cout <<average(values, (sizeof values)/(sizeof values[0])) << endl;//5.5 return 0; } double average(double* array, int count) { double sum(0.0); for(int i = 0; i < count; i++) sum += *array++; return sum/count; } 情况四:处理多维数组 #include <iostream> using std::cout; using std::endl; double yield(double beans[][4], int count); double yield1(double beans[], int count); int main(void) { double beans[3][4] = { { 1.0, 2.0, 3.0, 4.0 }, { 5.0, 6.0, 7.0, 8.0 }, { 9.0, 10.0, 11.0, 12.0 } }; cout <<yield(beans, sizeof beans/sizeof beans[0])<< endl;//78 cout<<yield1(&beans[0][0],sizeof beans/sizeof beans[0][0])<<endl;//78 return 0; } double yield(double beans[][4], int count)//以多维数组的形式处理多维数组 { double sum(0.0); for(int i = 0; i < count; i++) for(int j = 0; j < 4; j++) sum += beans[i][j]; return sum; } double yield1(double beans[], int count)//以一维数组的形式处理多维数组 { double sum(0.0); for(int i=0;i<count;i++) sum+=beans[i]; return sum; } 情况五:处理字符串 #include <iostream> using namespace std; void copy_string(char*from,char*to) { for(;*from!=’\0’;from++,to++) *to=*from; *to=’\0’; } void main() { char a[20]=”c language”; char b[20]=”very good”; copy_string(a,b); cout<<a<<endl; cout<<b<<endl; } 传引用方式 例一:左值引用 #include <iostream> using std::cout; using std::endl; using std::ends; void swap(int&,int&); void main() { int a=15,b=8; swap(a,b); cout<<"a="<<a<<ends<<"b="<<b<<endl;//a=8 b=15 } void swap(int&x,int&y) { int temp; temp=x; x=y; y=temp; } 例二:右值引用 #include <iostream> using std::cout; using std::endl; int incr10(int&& num); int main(void) { int num=3,value=6; cout<<incr10(value+num)<<endl;//19 cout << incr10(5)<<endl;//15 //incr10(num),incr10(value);//error cout << endl; return 0; } int incr10(int&& num) { num += 10; return num; } 将右值引用形参从左值转换为右值,使用std::move()库函数将一个左值转换为右值。 |
Status InitList_Sq(SqList &L) //定义
主函数: InitList_Sq(L);//其中 SqList L;
就针对参数而言,为什么是这样调用函数呢?