(一)malloc与结构体vs类和new
首先,因为c语言不是面向对象的,所以c语言中没有new这个操作,在c++中可以用new,但是其实c语言中的结构体加malloc实现的效果和c++中的类和new实现的是一样的。
首先看看c语言结构体的定义:
struct ListNode {
int val;
struct ListNode *next;
};
//定义结构体变量
struct ListNode node1;
//初始化结构体变量
struct ListNode node2={1,NULL};
也可以这样定义:
struct ListNode {
int val;
struct ListNode *next;
}Node;
//定义结构体变量
如果结果体变量,则上面的ListNode可以不存在。
如果用到typedef则ListNode这个tag也可以不存在:
typedef struct ListNode {
int val;
struct ListNode *next;
}Node;
//定义结构体变量
Node node1;
Node node2={3,NULL};
对于普通结构体变量来说,访问元素用node.val,而对于一个结构体指针:
typedef struct ListNode {
int val;
struct ListNode *next;
}Node;
//定义结构体变量
Node *node1;
data=node1->val;
然后就是结构体数组:结构体数组是具有相同结构类型的变量的集合
struct{
char name[8];
char sex[2];
int age;
char addr[40];
}student[40];
student这个变量里包含了40个元素,每个元素都是一个结构体类型的。
在使用结构体的时候,要为结构体分配内存空间,在c语言中用的就是malloc了
struct ListNode* l3= (struct ListNode*)malloc(sizeof(struct ListNode));
这里是为一个结构体指针分配的内存空间,就将所分配到的空间的首地址赋值给l3.
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
而对于c++,首先其结构体的定义和c不同:
其最大的区别就是在申明结构体变量时可以省略掉struct关键字
struct Student{
char name[8];
char sex[2];
int age;
char addr[40];
};
Student st1,st2;
using namespace std;
class Student{
public:
int no;
string name;
};
int main(){
Student* s=new Student();
s->no=1;
s->name="学生";
cout<<"学号:"<<s->no<<",姓名:"<<s->name<<"。"<<endl;
return 0;
}
对于c++来说,可以用new方法来为类的对象开辟内存空间。
(二)三目运算符
表达式1 ? 表达式2 : 表达式3;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* l3= (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* p=l3;
int val=0;
//进位初始为0
int c=0;
while(l1||l2){
int val=c+(l1?l1->val:0)+(l2?l2->val:0);
如果l1不为空的话,就取l1->value,否则为0.
(三)LeetCode此题代码