C到C++拓展(1)

1,输出的差别

#include <iostream>					//头文件
using namespace std;				//标准命名空间
int main()
{
	cout << "helloworld" <<endl;	//cout标准输出,和C中的printf效果一样,<< 输出运算符,endl换行符。    这种输出的前提是加了标准命名空间
}
std::cout << "helloworld" <<std::endl;     //作用域限定符,这种模式输出不建议。最好在开头加上标准命名空间省的麻烦

2,定义全局变量的区别

#include <iostream>
int g_a;
int g_a = 100;		//C语言中允许重复定义多个重名的全局变量,而C++不允许
int main()
{
	return 0;
}

3,结构体中的区别

#include<iostream>
struct test			//C中,结构体是各种数据类型的集合,C++中,结构体是一种类型
{
};
int main()
{
	struct test student;		//C中结构体变量名命名,结构体占0个字节
	test student;				//C++中结构体变量名命名,结构体占1个字节
	return 0;
}

4,子函数返回值差别
C>>>>>eg:

#include <stdio.h>
f1()								//函数没有返回值,void可省略
{
	printf("helloworld\n");
}
void f2()					//表示能接受任意参数
{
	
}
void f3(void)			//表示函数没有参数
{
	
}
int main()
{
	f1();
	f2(1,2,3);
	f3(1,2);			//传参则会报错
	return0;
}

C++>>>>>eg:

#include <iostream>
using namespace std;
f1()					//此处定义是错误的,函数必须要有返回值,就算无返回值也得把void写上
{

}
void f2()		//这是对f1()的正确写法
{
	
}
void f3()
{
	
}
int main()
{
	f1();
	f2();
	f3(1,2,3); 		//C中可以穿任意参数,而C++是不允许的,C++中相当于void f3(void);
	return 0;
}

5,三目运算符
C>>>>>eg:

#include <stdio.h>
int main()
{
	int a=1,b=2;
	int c;
	c=(a>b)?(a:b);
	printf("%d\n",c);		//输出结果是2(a>b判断结果 为真返回a的值,假返回b的值)
	(a>b)?a:b=100;		//看一下b=100,这次结果会怎么样?   在C中,显然这是一种错误的写法,(a>b)?a:b的返回值就是c为常数,怎么能够在常数之间互赋值。
}

C++>>>>>eg:

#include <iostream>
using namespace std;
int main()
{
	int a=1,b=2;
	int c;
	c = (a>b)?a:b;
	cout << c << endl;					//输出值为2
	
	c = (a>b)?a:b=100;
	cout << c << endl;			//这次输出c为???   当然是100咯,在c++中,能作为左值使用。
}

6,C++函数bool

#include <iostream>
using namespace std;
int main()
{
	bool a = ture;
	bool b = flase;
	cout << a << endl;		//输出值为1;
	cout << b << endl;		//输出值为0;

	b = 100;
	cout << b << endl;		//输出什么??    1.(bool 函数输出只有两种值,1,真;2,假)
	return 0;
}

7.const关键字,限定一个变量不允许被该改变。

#include <stdio.h>
int main()
{
	const int a=1;
	int *p = (int *)&a;
	*p = 2;
	printf("%d\n",a);		//在C中,const定义的变量不允许被改变,但可以借用地址来改变;
	输出a=2;
}
#include <iostream>
using namespace std;
/*int main()
{
	const int a=1;				//定义之后为a为常量,不开辟内存存储空间,放哪?存放在符号表中
	int *p = (int *)&a;			//进行取址操作,编译器会为其开辟4个字节的内存,并用1来填充
	*p = 2;
	cout << a << endl);		//在C++中,const定义的变量不允许被改变,也可以可以借用地址来改变;输出a=2;
}*/
void f()
{
	const int a =100;
	#define B 200
}
int main()
{
	f();
	//cout << a << endl;	//此处编译一定会报错
	cout << B << endl;	// 此处正确。因为a,B作用域不一样,a的作用域仅限于子函数内,B的作用域是从定义它那行命令开始
}

猜你喜欢

转载自blog.csdn.net/qq_41915323/article/details/86585352