#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;
}
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;
}