结构指针和结构变量的使用有什么区别?

Lok*_*esh -2 c structure

struct Book {
    int i;
} variable, *ptr;
Run Code Online (Sandbox Code Playgroud)

在访问结构成员时,我们使用 variable.i 或 ptr->i 我的问题是变量和 *ptr 的使用/使用之间有什么区别

agh*_*ast 5

想象一只狗。

现在想象一条狗皮带。

现在想象一下被拴在皮带上的狗。

皮带代表指向狗的指针。如果您创建一个指针(皮带),不有一个结构,以点(狗),那么你就不能去公园和玩飞盘。

如果你有一个结构,但没有一个指针,你仍然可以做很多事情。

使用指针需要有一个指向的结构。您可以声明一个结构,然后使用&运算符指向它,或者您可以调用类似malloccalloc这样的函数,该函数将返回动态分配的内存,您可以将其用作结构:

void demo() {
    struct Book b1;
    struct Book b2;

    typedef struct Book * Bookptr;

    Bookptr p;

    // Assign pointer to existing object using address operator:

    p = &b1;
    p->i = 10;
    p = &b2;
    p->i = 12;
    printf("Book 1 has i: %d, while Book 2 has i: %d\n", b1.i, b2.i);

    // Use dynamically allocated memory
    p = calloc(1, sizeof(struct Book));
    p->i = 3;
    printf("Dynamic book has i: %d\n", p->i);
    free(p);
}
Run Code Online (Sandbox Code Playgroud)

  • @SebTu - 这些将是智能指针。 (2认同)