C++入门篇三

引用:&

&放在左边就是引用,放在右边就是取地址

int  main() {
    //引用的类型必须相同,一经引用,不可以在被引用
    int a = 100;
    int  &b = a;//b引用a之后,两个同时都会改变,此时b已经指向a了,如果在来一个c的话,不能在去指向c。b和a的类型必须相同
    b = 304;//必须初始化,int就是初始化,实质上是*b=304,默认会加上*
    printf("a:%d,b:%d\n", a, b);
}

给数组起别名:

//给数组起别名

int  main() {
    int  arr[10];
    for (int i=0;i < 10;i++) {
        arr[i] = i;
    }

    //用&引用,起别名
    int (&parr)[10] = arr;//用parr引用arr,相当于是arr重新赋值给了parr
    for (int i = 0;i < 10;i++) {
        cout << parr[i] << endl;

    }

}

第二种方式起别名,typedef

    //第二种方式起别名
    typedef int Arrpy[10];
    Arrpy  &parr2 = arr;
    for (int i = 0;i < 10;i++) {
        cout << parr2[i] << " ";
    }
    cout << endl;

//尽量使用const替代define
//define宏常量没有类型概念
//define宏没有作用域概念

 

 

参数的传递方式:

值传递:

void  swap1(int a,int b) {
    int temp = a;
    a = b;
    b = temp;

}

void  s1(){
    int a = 32;
    int  b = 43;
    swap(a, b);//传递;两个值进去
    cout << "a:" << a << "   b:"<<b << endl;
}

 

指针传递:

//指针传递
void  swap2(int  *a,int  *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void  s2() {
    int  a = 20;
    int  b = 65;
    swap2(&a, &b);
    cout << "a:" << a << "b:" << b << endl;

}

运行结果:

引用传递:

//引用传递
void  swap3(int  &a,int  &b) {
    int  temp = a;
    a = b;
    b = temp;
}
void   s3() {
    int  a = 342;
    int  b = 545;
    swap3(a, b);
    cout << "a:" <<a << "b:" << b << endl;


}
int  main() {
    s3();
}

 如果函数的返回值是引用的话,那么可以是作为左值的操作


int  & test07(){
    static  int  a = 120;
    return  a;
}
int  main() {
    int  &res = test07();//内部就是int  * const  res=&test07();内部就是一个指针常量
    cout << res <<endl;
    
}

注意:不要返回函数局部变量的引用

引用的本质就是在C++内部实现的指针的常量,指针的本质就是一个指针常量

 

利用指针来开辟内存空间:

 

struct Person2
{
    int  age;
    string  name;
};

//利用指针来开辟空间
void  test10(Person2*  &p) {//这边引用,p就是传过来的指针,就是引用
    p = (Person2*)malloc(sizeof(Person2));
    p->age = 43;
}
int  main() {
    Person2  *p1=NULL;
    test10(p1);//相当于传了一个指针过去,&p1>>>>>>>
    cout << "age" << p1->age << endl;
}

 

 

用指针来接受:**p

void  malloc1(Person2 **p) {
    //用指针来接收,**p就是person2对象,*p就是person2指针,p就是person对象的指针的指针
    *p = (Person2*)malloc(sizeof(Person2));//强制转换
    (*p)->age = 54;
    cout << "age:" << (*p)->age << endl;
}
void  test11() {
    Person2  *p1=NULL;
    malloc1(&p1);//
}
int  main() {
    test11();

}

posted @ 2019-04-09 06:28  风不再来  阅读(211)  评论(0编辑  收藏  举报