学习C++(1)记载的一些网易云笔记

1.C语言中,未初始化的全局变量为0,未初始化的局部变量为垃圾值。C 支持全局变量的重复定义,而C艹不可以。

#include <iostream>

using namespace std;

int a;
int a = 1;

int main ()
{   
    cout << a << endl;
}

编译不通过。

2 . C 中的一些不好的使用方式

#include <stdio.h>
// 1 函数可以没有返回参数类型
f()
{
    printf ("hello world\n");
}

// 2 函数参数可以没有数据类型
g(i)
{
    return i;
}

int main()
{
    // 3 没有参数的函数可以接收任意个参数
    f(1,2,3,4,5);

    g(12,15);

    return 0;
}

3.下面语句在 C 中不可以使用,因为 a 是一个寄存器变量, 取地址符只能取内存变量,但是在 C艹 中可以,这时 a 不再是一个寄存器变量而是默认为普通变量。、

register int a;
&a;

4.三目运算符
在 C 中结果是将常量2 赋值给 C, 而不是把 B 赋值给 C,所以不能当做左运算符。
但是在C艹中完全可以,因为三目运算符的结果返回的是变量 B 。

int a = 2, b= 2 ;
Int c = (a < b) ? a : b ; 
(a < b) ? a : b  =  10// c ++ 可行 ,c 不行

用 C 模拟 C艹 中的效果:

*((a < b) ? &a : &b ; )= 10

5.C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型 。所以在定义变量的时候需要在前面加上 struct 关键字进行修饰。C++中 struct 定义了一种新的数据类型,可以直接用来定义变量。

#include <iostream>

using namespace std;

struct test
{
    int i;
};

int main ()
{
    test t;
    return 0;
}

6.const 在 C 中是只读变量,不能通过变量的方式来修改,可以通过其他方式修改,比如指针。在 C艹 中 const修饰变量为常量,存在于符号表,不占用内存,相当于define。

#include <iostream>

using namespace std;

int main ()
{
    const int a = 1;
    int *p = (int *)&a;

    *p = 3;

    cout << *p << " " << a << endl;
    return 0;
}

7.在C艹中define和const的区别。
前者作用域是从这一行往下。
后者作用域可为局部变量。

#include <iostream>

using namespace std;

void print()
{
    const int a = 1;
    #define b 2
    cout << a << " " << b << endl;
    #undef b
}

int main ()
{
    print();
//  cout << a << endl;
    cout << b << endl;
    return 0;
}

8.定义一个引用时,一定要初始化。

Int a = 1;
int &b = a;

在C艹里引用实现是一个常指针,因此引用所占的空间是指针的大小。
const 的就近原则

#include <iostream>

using namespace std;

struct test
{
    char &a; 
    char &b; 
};


int main ()
{
    int a = 1;
    int &b = a;
    char c = 'a';
    char &d = c;

    const int *p;                 //const就近原则
//  int * const p;
//  const int * const p;
    (*p)++;

    cout << sizeof(b) << endl;
    cout << sizeof(d) << endl;
    cout << sizeof(test) << endl;
    return 0;
}

10.利用引用交换变量的值。

#include <iostream>

using namespace std;

void swap (int &x, int &y)
{
    int tmp = x;
    x = y;
    y = tmp;
}

void swap (int *x, int *y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

void swap()
{
    cout << "my cat is very cute" << endl;
}

int main ()
{
    int a = 1, c = 2;
    int &b = a; //引用要注意初始化

    cout << b << endl;

    swap(a , c);//利用引用来交换变量的值
    cout << a << " " << c << endl;

    swap(&a , &c);
    cout << a << " " << c << endl;

    swap();
    return 0;
}

11.C++中的布尔类型
C++在C语言的基本类型系统之上增加了bool
C++中的bool可取的值只有true和false
理论上bool只占用一个字节,
如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现

true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示

bool类型只有true(非0)和false(0)两个值
C++编译器会在赋值时将非0值转换为true,0值转换为false

#include <stdio.h>

int main()
{
    bool b = true;
    printf ("%d, %d\n", b, sizeof(b));

    int a = 10;
    b = 3;
    a = b;
    printf ("a = %d, b = %d\n", a, b);

    b = -5;
    a = b;
    printf ("a = %d, b = %d\n", a, b);

    b = 0;
    a = b;
    printf ("a = %d, b = %d\n", a, b);

    b++;
    printf ("a = %d, b = %d\n", a, b);

    b += 1;
    printf ("a = %d, b = %d\n", a, b);
    return 0;
}

12.C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替。

#include <iostream>

using namespace std;


int add(int a, int b, int , int)
{
    return a + b;
}

/*
int add (int a ,int b, int = 0, int = 0)
{
    return a + b;
}
*/

int main ()
{
    add(1, 2, 3, 4); 
  //add(1, 2);
    return 0;
}

13.

//存在默认参数无实参时,使用默认参数。
//存在默认参数有实参时,使用实参。
//默认参数后,都必须使用默认参数
#include <iostream>

using namespace std;

int add (int a , int b = 10, int c = 10) 
{
    return (a + b + c); 
}

int main ()
{
    int ret; 
    ret = add(1, 2); 
    cout << ret << endl;

}

14.

#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;


void InitMemory(char *&str)  //指针的引用
{
    str = (char *)malloc(100);
}

int main ()
{
    char *ptr = NULL;

    InitMemory(ptr);

    strcpy(ptr, "my cat is very cute");

    cout << ptr << endl;
    return 0;
}

15.

#include <iostream>

using namespace std;

int main ()
{
    // int &a = 1 ; 不可以用常量初始化常引用

    const int &a = 1;
    //可以用常量初始化常引用
    // a++;不可
    int *p = (int *)&a;
    (*p)++;
    //通过指针修改
    cout << a << endl;


    int b = 1;
    const int &c = b;
    //用变量初始化常引用
    //c++;不可
    b++;
    cout << c << endl;

    return 0;
}

16.

//构成重载的条件:1.参数的个数不同 2.参数的顺序不同 3.参数的类型不同
//返回值不同不可以构成重载

#include <iostream>

using namespace std;

int add (int x, int y)
{
    return x + y;
}

double add (double x, double y)
{
    return x + y;
}

int main ()
{
    add(1, 2); 
    add(2.00, 3.00);
    return 0;
}

17.函数重载和函数指针一起使用

#include <iostream>

using namespace std;

int add (int x, int y)
{
    return x + y;  
}

double add (double x, double y)
{
    return x + y;
}

int main ()
{
    int (*p)(int, int);
    p = add;
    cout << p(1, 2) << endl;

    double (*q)(double, double);
    q = add;
    cout << q(1.f, 2.3) << endl;

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值