c++对c语言的增强

#include <iostream>

using namespace std;

//c++语言对全局变量的定义检测能力增强了,下面两段代码在c++中会报错,重定义了
//int g_val;//内存bss段
int g_val = 20;
struct student
{
    char name[1028];
    int id;
};

void test1()
{
    //c语言写法,一定要加struct,不然报错
    struct student t1;
    t1.id = 10;
    //c++写法,不需要带struct
    student t2;
    t2.id = 20;
}

//c++新增bool类型
void test2()
{
    //true时值为1,false时值为0,且波尔类型的变量只能是1或0,其它任何其他赋值都为1
    bool flag = true;
    flag = true;
    cout << "true=" << flag << endl;
    flag = false;
    cout << "false=" << flag << endl;
    flag = -20;
    cout << "-20="<< flag << endl;
    //波尔类型变量占1个字节,int4个字节
    cout << sizeof(flag) << endl;

}

void test3()
{
    int a = 10;
    int b = 20;
    int c = 0;
    //三目运算符
    c = a < b ? a : b;
    cout << "c=" << c << endl;
    //三目运算符可以做左值
    //下面一段代码首先执行三目运算符...?...:...,然后返回的不是a的值而是a的地址,然后用*表示对此地址内容进行操作,即对a进行赋值50
    *(a < b ? &a : &b) = 50;
    cout << "a=" << a << endl;
}

void test4()
{
    //c语言中const的用法
    //1.下面两段代码意义是完全一样的,const右边离谁近就修饰谁,但此时a和b是可以被指针去地址修改的,是假常量,只是被保护了而已
    const int a = 10;
    int const b = 10;
    //2.const右边离int近,所以const修饰指针c指向的变量,即指针c指向的变量不能被改变,但指针c的指向可以改变
    const int *c;
    //3.const右边离d近,所以const修饰指针d,即指针d的指向不可以改变,但指针d指向的内容可以改变
    //int *const d;

    //c++中const的用法
    //1.这时的e是被存储在常量区的符号表中,符号表的存储形式为key-value(键值对),key即为e,value即为10
    const int e = 10;
    //先取变量e的地址,再把地址强转为int *类型的
    int *p = (int *)&e;
    *p = 20;
    //这是结果e为10,*p为20,e变量因为是在常量区的符号表内,所以不可改变也不可取地址
    //当指针p硬要去对一个常量取地址的时候,编译器会临时开辟一个空间,这个空间在内存的栈区,这是会让这个指针指向这个临时空间,对指针p指向区域的操作也就是对这个临时区域进行操作
    //被const修饰的变量在c++中会常量化,所以必须要初始化,例const int a = 10,char *const p = NULL
    cout << "e=" << e << endl;
    cout << "*p=" << *p << endl;
}

//c++对枚举的增强
void test5()
{
    enum season
    {
        spring = 0,
        summer,
        autumn,
        winter,
    };
    //在c++中,结构体和枚举类型变量都不需要加struct或enum
    //在c++中对枚举变量进行赋值只能是声明的枚举变量里的参数(如spring,summer等),不可以直接用数字(1,2,3...)直接赋值
    season s = spring;
    cout << "s=" << s << endl;
}

int main(void)
{
    int sum = 0;
    //c++中变量随用随定义
    for (int i = 0; i < 10; i++)
    {
        sum = i + sum;
    }
    cout << sum << endl;
    //i变量定义的范围只在for循环中,下面那段代码是错误的
    //cout << i << endl;
    for (int j = 0; j < 10; j++)
    {
        int num = 0;
        num = j + num;
        cout << "j=" << j << endl << "num=" << num << endl;
    }
    test1();
    test2();
    test3();
    test4();
    test5();
    return 0;
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页