C typedef和struct的随笔

C typedef 和 struct的随笔

推荐阅读 typedef关键字与结构体、结构体指针的定义

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就是起个名字方便调用。可以同时为结构体起别名以及给结构体指针类型起别名。因此定义的时候要使用就得初始化内存空间。日后有更加深入的理解再记录下来。

猜你喜欢

转载自blog.csdn.net/qq_44880154/article/details/111826462