C++学习(二)——基础(二)

C++对C语言的增强

以下面的代码最为例子
C语言:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*	1、全局变量检测增强 在C语言中,这段代码是可以编译通过的
int a;
int a = 10 */

/*	2、函数检测增强 在C语言中,这段代码是可以编译通过的

f(a, b)
{
	return a * b;
}*/

/*f(a)
{
	;
}*/

/*	3、类型转换检测增强
void test()
{
	char * p = malloc(64);
}*/

//	4、struct 增强
struct Teacher
{
	int age;
	//	void f(); // 在C语言中,结构体下是不可以放函数的
};

void test2()
{
	struct Teacher t1;
	//	Teacher t2;  //	在C语言中,定义结构体变量的时候必须加关键字 struct
}

//	5、bool类型增强  在C语言中,没有bool类型
//	bool flag;

//	6、三目运算符增强

void test4()
{
	int a = 10;
	int b = 20;
	printf("result = %d\n", a > b ? a : b);
	*(a > b ? &a : &b) = 100;//C语言下,三目运算符返回的是值
	printf("%d\n", a);
	printf("%d\n", b);
}

int main(void)
{
	//	f(10, 10);
	//	test();
		test4();
	system("pause");
	return 0;
}

C++

#include<iostream>

using namespace std;

/*	1、全局变量检测增强 在C++中,这段代码编译是会报错的

int a;
int a = 10; */

/*	2、函数检测增强 在C++中,这段代码编译是会报错的
f(a,b)
{
	return a * b;
}
 C++对函数形参变量类型检测增强
 对函数声明的返回值类型检测增强
 函数返回值检测增强
 调用函数时对参数传入个数检测增强
*/

//	3、类型检测转换增强
void test()
{
	//char * p = malloc(64);
	char *p = (char *)malloc(64);
}

//	4、struct 增强
struct Teacher
{
	int age;
	void f() { age++; };  //	而在C++中,结构体下是可以放函数的
};

void test2()
{
	struct Teacher t;
	Teacher t1;  //	在C++语言中,是可以不用加关键字的
	t.age = 30;
	t.f();

	cout << "Teacher t.age = " << t.age << endl;
}

//	5、bool类型增强 
//	bool类型代表真和假 真 true — 1 假 false — 0
bool flag = true;  

void test3()
{
	cout << "sizeof(bool) = " << sizeof(bool) << endl;
	// flag = 1000;
	cout << "flag = " << flag << endl;
}

//	6、三目运算符增强
void test4()
{
	int a = 10;
	int b = 20;
	cout << (a > b ? a : b) << endl;
	a > b ? a : b = 100;  //	b = 100 C++中三目运算符返回的是一个变量	
	cout << a << endl;
	cout << b << endl;
}

int main()
{
	//	test2();
	//test3();
	test4();
	system("pause");
	return 0;
}

const关键字增强

//const增强
const int m_a = 100; //全局const变量 受到常量区保护 表示此变量不允许被修改 

void test5()
{
	const int m_b = 100;  // 局部const修饰的变量可以间接修改成功
	//m_b = 200;
	int *p = &m_b;
	*p = 200;
	printf("%d\n", m_b);
}
//const增强
const int m_a = 100; //与C语言一样 全局const变量 受到常量区保护 表示此变量不允许被修改 

void test7()
{
	const int m_b = 100; // 间接修改 m_b 的值并没有修改成功
	//	m_b = 200;
	int *p = (int *)&m_b;
	*p = 200;
	cout << "m_b = " << m_b << endl;
}

// 为什么没有修改成功呢?
// 在C语言中 const修饰的局部变量是放在栈区的,栈中变量的值是可以被修改的
// 但是在C++中,这个局部变量并没有放在栈区,而是放在符号表中 &m_b取地址的时候,会产生一个临时变量
// int temp = m_b
// int *p = & m_b
// *p = 200

注意

  • const在C语言下,默认是外部链接属性
  • const在C++下,默认是内部链接属性

const 分配内存情况

#include<iostream>

using namespace std;

//	1、对const修饰的变量取地址时会分配临时内存‘

void test1()
{
	const int m_a = 10;
	int *p = (int *)&m_a;
}

//	2、const前加入extern关键字后,也会分配内存

//	3、使用变量来修饰const修饰的变量
void test2()
{
	int a = 10;
	const int m_a = a;
	int *p = (int *)&m_a;
	*p = 20;
	cout << "m_a = " << m_a << endl;
}

//	4、对于自定义数据类型,也会分配内存


int main()
{
	test2();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walkerrev_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值