目录
一.C语言和C++结构体的区别
1.1区别一
1.2区别二
二.数据类型与空间的关系
三.更严格的类型转换 (了解)
1.c的类型转换要求比较松
2. c++必须要求显示的类型转换
四.三目运算符
4.1 关于赋值
4.2c++和c在三目运算上的区别
4.3 左值和右值的概念
1.c语言定义结构体变量需要加上struct,c++中不需要
2.c语言结构体只能定义成员变量,不能定义成员函数,c++可以定义成员变量,也可以定义成员函数。
C语言定义结构体变量需要加上struct 如struct Maker c
//定义结构体及定义结构体数据类型
struct Maker{
char name[64];
int age;
}
void text1(){
Maker c;//c++定义结构体变量
struct Maker C;//C语言定义结构体变量
}
int main()[
text1();//调用
}
c++的结构体内可以写函数
如
struct Maker2{
int a;
void func(){ //c++可以结构体内部写函数
cout<<"func"<
}
}
//定义结构体及定义结构体数据类型
struct Maker{
char name[64];
int age;
}
void text1(){
int; //定义一个数据类型,不分配空间
int b; //开辟一个空间名字为b,大小由编译器决定
int a = 10; //定义变量a并分配空间10
Maker c;也会分配空间
}
int main()[
text1();//调用
}
注意结构体数据类型和普通的数据类型一样如int是不开辟空间的
int b; //开辟一个空间名字为b,大小由编译器决定
int a = 10; //定义变量a并分配空间10
char*p = malloc(64); //c语言中这种隐式转换是可以的
char*p = (char*)malloc(64);
a>b?a:b //这句话的意思是若a>b成立时返回a,不成立返回b
注意:只有空间/变量才能赋值,数值是不能赋值的
void text(){
int a = 10;
int b = 20;
printf("%d\n",a>b?a:b); //这里返回 20
(a>b?a:b)= 100;
printf("b=%d\n",b); //这里会报错
*(a>b?&a:&b)= 100;
printf("b=%d\n",b); //这里就不会报错
}
(a>b?a:b)= 100;
printf("b=%d\n",b); //这里会报错
这里报错的原因是(a>b?a:b),这个式子运算结果是20,20 = 100;100赋值给20会报错,因为只有空间和变量才能赋值
*(a>b?&a:&b)= 100;
printf("b=%d\n",b); //这里就不会报错
这里不会报错的原因是: *(a>b?&a:&b),这个式子是用指针返回b的地址&b,用100对&b赋值就会将20更改为20
void text(){
int a = 10;
int b = 20;
(a>b?a:b)= 100;
cout<<"a="<
cout<<"b="<
}
c++三目运算与C不同的是,c++返回的是左值,是空间 ,所以100是可以对空间进行赋值的
左值:L表示Location,表示内存可以存值,是空间
右值:R表示read,读的值
如c语言三目运算符返回的是右值,c++返回的是左值