注册 登录
编程论坛 JAVA论坛

数据结构大神有吗,新手接触数据结构,一脸懵逼。。

你若为王 发布于 2016-10-11 20:01, 1682 次点击
Status InitList_Sq(SqList &L)    //定义
主函数: InitList_Sq(L);//其中  SqList L;
就针对参数而言,为什么是这样调用函数呢?
2 回复
#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()库函数将一个左值转换为右值。
#3
反脑控20162016-10-11 20:45
如果看不懂,指出看不懂的地方。我再进一步解释。
1