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

时间:2016-05-12 19:01:16

标签: c structure

struct Book {
    int i;
} variable, *ptr;

在访问struct memebers时,我们使用variable.i或ptr-> i 我的问题是/使用变量和* ptr

之间的区别是什么

2 个答案:

答案 0 :(得分:4)

想象一只狗。

现在想象一下狗皮带。

现在想象一下那条狗被绑在皮带上。

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

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

使用指针需要具有指向的结构。您可以声明一个结构,然后使用&运算符指向它,也可以调用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);
}

答案 1 :(得分:0)

variable将具有与之关联的内存,因此可以在创建时直接访问。因为内存是在编译时给出的,所以.意味着编译器可以直接查找结构中的值而无需进行任何类型的直接跳转

ptr只是指向内存的指针,直到指向具有内存的内容(或通过动态内存分配给定内存)时才能使用。->表示编译器必须读取内存首先然后跳到该位置。