从C过渡到C++基础篇(一)

1.输入输出:

从C过渡到C++,首先我们从输入输出讲起,我们都知道,在C语言中,从键盘输入数据的函数是scanf(),打印输出的函数是printf(),而在C++中,输入变成了cin,输出变成了cout,当然头文件也发生了变化,C++中,输入输出的头文件为#include<iostream>,同时加上using namespace std;但是我们在VS2019编译器中使用scanf时编译器会警告我们,我们还需要加一个宏来忽略警告,我们只能用更安全的输入函数,那就是scanf_s(),那么我们来简单举几个例子来说明C语言为什么淘汰scanf。

其中最主要的原因就是不安全,我们进行以下代码:

#include<iostream>
using namespace std;
int main()
{
    int a=10;
    char stra[10];
    scanf("%s",stra);

    printf("a=%x,stra=%s",a,stra);
    return 0;
}

这是一个很简单的代码, stra字符数组一共10个空间,但是scanf不会限制我们输入的字符换长度,当我们输入的字符串长度大于9个时,多出来的部分会冲进变量a的缓存区,会导致变量a原有的数据发生改变,所以scanf函数不安全,可以使用更加安全的版本scanf_s().

C++输入输出实例:

int main()
{
	int a, b;
	char ar[10];
	cin.getline(ar, 10);//字符串可以用这个函数
	//cin输入流  >>提取符
	cin >> a >> b;
	//cout标准输出设备  <<插入符
	cout << a << endl << b << endl;//endl相当于'\n';
	return 0;
}

切记以下是错误的使用方式:

cin>>a,b;
cout<<a,b;

2.C++统一初始化

我们在C语言中对某一个变量进行初始化时,都后用=来进行,但是C++给出了更多的初始化方法,例如我们定义一个int类型的变量a:

int a=10;
//C++我们还可以这样进行初始化
int a(10);
int a{10};

其中我们大括号用的最多,括号用的较少,如果我们括号和大括号里面都不填入数据,此时括号不能默认初始化为0,而大括号默认初始化为0,为什么会这样呢?是因为如果括号里面不填入数据,编译器会认为这是一个函数声明,函数返回类型为int,函数名为a,形参为空,所以不会进行初始化。所以我们最好还是多用大括号,以免出错。

那么我们就要用括号不向括号里填入数据进行初始化为0怎么办?其实也不是没有办法:

int d = int();
int e = int{};//两个默认初始化都为0;

这样就可以了,两个初始化都为0.

以下给出指针,数组用大括号进行初始化的实例:

//指针初始化
	int* p = NULL;
	int* q{ NULL };//只有这两种
	int* m{ &a };

	//初始化数组
	int ar[]{ 1,2,3 };

我们的大括号不仅可以进行初始化,还可以进行赋值

//大括号可以初始化,也可以用于赋值
	int m{ 10 };//初始化
	m = { 12 };//赋值  ok
	m = 12.23;//ok  会有隐式转换
	m = { 12.23 };//error  花括号的类型检查更加严格

注意:我们在用大括号对int类型变量m赋值时,如果大括号里是一个浮点型,那么编译器会报错,因为大括号的类型检查会更加严格,用=赋值时不会报错,因为会有隐式转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值