//区别④:struct类型的加强(C++版本) #include<iostream> using namespace std; //C++中的struct是一个新类型的定义声明 //c++中结构体的默认访问权限public,和类不同 struct Teacher{ //char name[20]="小米";//报错 error C2536: “Teacher::Teacher::name”: 无法指定数组的显式初始值设定项 //错误原因:上面这种初始化,同时完成了内存空间的分配和内容的初始化。 //但是结构体在类型定义的时候并没有分配内存,所以报错,对于int age=1;可能是c++编译器做了特殊处理 char name[20]; int age = 1;//在c++中,结构体定义时部分成员变量可以赋初始值(为了和C语言统一,还是别用这种写法了,结构体声明中不要做任何赋值操作) //c++可以在结构体内定义函数,C语言不可以 int getage(){ return age; } int r; //int s = r*r; 不要做这种危险的定义,因为当定义Teacher变量的时候,便会进行r*r的运算,此时r可能还没有赋值 //此时的s就是个脏数据,如果后来你需要使用s,此时s不会再次进行r*r的运算,导致你永远取不到正确的s的值 //最好的办法写一个函数 int gets(){ return r*r; } }; void main(){ //在c++定义结构体,可以使用struct关键字,也可以不使用 Teacher t2; struct Teacher t1; printf("age=%d ", t1.age); system("pause"); }
//区别④:struct类型的加强(C语言版本) #include<stdio.h> #include<stdlib.h> #include<string.h> //C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型 struct Teacher{ char name[20]; //int age=1; 报错:在C语言结构体定义中,不可以赋初始值, int age; //C语言的结构体里不可以定义函数 /*int getage(){ return age; }*/ }; void main(){ //Teacher t1; 在C语言中 ,定义结构体必须使用struct 关键字,因为C编译器并不认为结构体是一种新的类型 struct Teacher t1; system("pause"); }
//区别⑤:函数,变量类型加强(C++版本) #include<iostream> using namespace std; //C++中所有的变量和函数都必须有类型 //C语言中的默认类型在C++中是不合法的 //f(i){ // printf("i=%d ", i); //} int go(){ printf(""); //错误 1 error C4716 : “go” : 必须返回一个值 //在c++中,函数定义了返回值类型,那么必须返回对应类型的值,不然会报错 return 5; } //小结: //在C++中,int f(); 和int f(void)具有相同的意义,都表示返回值为int的无参函数 //C++更加强调类型,任意的程序元素都必须显示指明类型 void main(){ system("pause"); }
//区别⑤:函数,变量类型加强(C语言版本) #include<stdio.h> #include<stdlib.h> #include<string.h> //C语言中,函数的形参可以不设置类型,返回值也可以不设置类型 f(i){ printf("i=%d ",i); } int go(){ printf(""); //警告 warning C4716: “go”: 必须返回一个值 //在c中,函数定义了返回值类型,可以不返回对应类型的值,只是编译器会提出警告 } //小结: //在C语言中,int f();表示返回值为int,接受任意参数的函数 //int f(void);表示返回值为int的无参函数 void main(){ //C语言中,从语言编译器并不限制函数f可以接受多少个参数? f(1, 2, 3, 4, 5); system("pause"); }
//区别⑥:bool类型(C++版本) #include<iostream> using namespace std; void main(){ bool b = true; printf("bool类型的大小是%d个字节 ",sizeof(bool)); //bool类型占1个字节小大的内存空间 b = 4; // 类型隐式转换 warning C4305: “=”: 从“int”到“bool”截断 printf("b=%d ",b);//打印 1 b = 0; printf("b=%d ", b);//打印 0 system("pause"); }