C typedef 和 struct的随笔
typedef 相当于给基本的数据结构起了 花名、别名、小名;
配合struct 还可以让初始化变量更简洁。
下面简单使用typedef和struct,主要的区别就是初始化变量的不同,typedef少写一个struct。
Book book;
struct Car car;
c++代码,有些结构体定义规范据说在c++可以在c不行。
#include<stdio.h>
using namespace std;
typedef struct Book{
int pages;
char *name;
double price;
}Book;
struct Car
{
char *type;
int price;
};
int main(int argc, char const *argv[])
{
Book book;
book.pages = 200;
book.name = "python";
book.price = 35.6;
printf("%s's pages = %d,price = %f\n",book.name,book.pages,book.price);
struct Car car;
car.price = 66666;
car.type = "private car";
printf("%s's price = %d\n",car.type,car.price);
return 0;
}
result
python's pages = 200,price = 35.600000
private car's price = 66666
链表的结点例子:这里只用到了struct ,结构体指针的正常使用。结构体还可以在定义的时候初始化变量。这里的Node是struct Node
#include <stdio.h>
using namespace std;
// typedef struct Node
// {
// int data;
// Node *next;
// } Node, *Linklist;
struct Node
{
int data;
Node *next;
};
int main(int argc, char const *argv[])
{
Node* lp = NULL;
Node n1,n2,n3;
n1.next = &n2;
n1.data = 11;
n2.next = &n3;
n2.data = 22;
n3.data = 33;
n3.next = NULL;
lp = &n1;
return 0;
}
result:
以下是typedef的简化调用,这里的Node是struct Node的别名;Linklist 是Node *Linklist的别名即
struct Node *Linklist,此时的 Linklist 相当于结构体指针 Node *
#include <stdio.h>
using namespace std;
typedef struct Node
{
int data;
Node *next;
} Node, *Linklist;
// struct Node
// {
// int data;
// Node *next;
// };
int main(int argc, char const *argv[])
{
// Node* lp = NULL;
Linklist lp = NULL;
Node n1,n2,n3;
n1.next = &n2;
n1.data = 11;
n2.next = &n3;
n2.data = 22;
n3.data = 33;
n3.next = NULL;
lp = &n1;
return 0;
}
result:
下面是结构体定义时定义了一个不用初始化空间的指针。
#include <stdio.h>
using namespace std;
// typedef struct Node
// {
// int data;
// Node *next;
// } Node, *Linklist;
struct Node
{
int data;
Node *next;
} * node_pointer; // 不使用typedef定义的结构体指针没有开辟内存空间
int main(int argc, char const *argv[])
{
// Node* lp = NULL;
node_pointer = NULL; // Linklist =>typedef Node *Linklist
// struct Node n1,n2,n3;
Node n1, n2, n3;
n1.next = &n2;
n1.data = 11;
n2.next = &n3;
n2.data = 22;
n3.data = 33;
n3.next = NULL;
node_pointer = &n1;
printf("node_pointer = %p\n",node_pointer); // 000000000061FE10
printf("&n1 = %p\n",&n1); // 000000000061FE10
return 0;
}
result:
node_pointer = 000000000061FE10
&n1 = 000000000061FE10
小结
typedef就是起个名字方便调用。可以同时为结构体起别名以及给结构体指针类型起别名。因此定义的时候要使用就得初始化内存空间。日后有更加深入的理解再记录下来。