0

因此,假设我有一个名为 A 的结构指针和一个名为 B 的结构指针:

struct example{
//variables and pointers
}*A 

然后我有一个数据类型结构示例的指针:

struct example *B=malloc(sizeof(struct example));

如果我做

A=B;

这个算术运算是否意味着任何结构指针 B 指向的都是结构指针 A 也指向的东西?我用原始数据类型和指针得到它,但结构让我感到困惑,因为它们里面有变量..

假设结构指针 A 已设置并且所有内容

4

5 回答 5

3

是的,使用以下代码行,A 应该指向同一个位置,B 指向的是相同的位置。

/* Define the struct example datatype */
struct example{
    //variables and pointers
};

/* Declare A and B as pointers to struct example */
struct example *A;
struct example *B;

/* Allocate memory equivalent to the size of struct example
   and store the address in B */
B=malloc(sizeof(struct example));

/* Copy the address in B to A, so that A points to the same
   location B was pointing to */
A = B;

您应该将指针视为unsigned long保存内存地址的另一个变量(因为指针仅指向它所保存的地址)。

与任何其他变量一样,您可以将存储在一个指针变量中的地址复制到另一个。

于 2013-03-20T20:24:33.187 回答
1

你所做的只是让 A 和 B 指向同一个结构。例如,假设您的 malloc() 在地址 0x1000 处为您的结构调用保留空间(只是一个示例)。

现在,在你的 malloc() 之后,B 只保存数字 0x1000。因此,当您执行 A = B 时,您也只是将 A 设置为 0x1000。这样 B->var1 与 A->var1 是完全相同的实体。

于 2013-03-20T20:26:36.670 回答
1

是的... A 和 B 是指针,而不是值。当您说 A = B 时,您是在说“将指针 A 设置为指向 B 指向的同一事物”——或者更具体地说,A 和 B 在分配后都将包含相同的内存地址。

当你使用 A->someVar 时你真正在做什么

{someVar 的地址} = {结构的内存地址} + {someVar 相对于结构开始的字节偏移量}

于 2013-03-20T20:27:00.920 回答
0

是的,下面的代码:

struct example* A;
struct example* B;
B = malloc(sizeof(struct example));
A = B;

将导致A指向相同的内存B。但是请注意,更改指针本身的值 ( B) 不会对另一个指针 ( A) 产生影响,例如,当您这样做时:

free(B);
B = NULL;

该指针A仍将指向内存,该实例struct example曾经驻留于此,因此A将成为无效(悬空)指针。

于 2013-03-20T20:27:58.573 回答
0

指针将数据地址保存在内存中,调用malloc返回您为数据分配的内存区域开始的第一个字的地址。

你可以想象一个指针,就像一张纸,你写下建筑物的号码,当你进入它时,你会发现公寓也有数字等等。

因此,将指针的值分配给另一个指针就像拿另一张纸在上面写上第一张纸上的数字一样。

内部的原始数据类型和/或其他指针struct就像公寓一样,它们可能会向您展示一些具体的东西,或者让您进入可以找到其他东西的其他区域。

于 2013-03-20T20:34:30.943 回答