使两个struct指针相等

时间:2013-03-20 20:20:34

标签: c pointers struct

所以假设我有一个名为A的结构指针和一个名为B的结构指针:

struct example{
//variables and pointers
}*A 

然后我有一个数据类型struct example的指针:

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

如果我这样做

A=B;

这个算术运算是否意味着无论结构指针B指向什么,结构指针A也指向哪个?我用原始数据类型和指针得到它但结构混淆了我,因为它们里面有变量..

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

5 个答案:

答案 0 :(得分: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变量,它将一个地址保存到内存中(因为指针只指向它所持有的地址)。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

是的...... A和B是指针,而不是值。当你说A = B时,你说的是“将指针A设置为指向B指向的同一个东西” - 或者更具体地说,A和B将在赋值后包含相同的内存地址。 p>

当您使用A-> someVar

时,您真正在做什么

{someVar的地址} = {结构的内存地址} + {somevar的偏移量,以字节为单位,相对于结构的开头}

答案 3 :(得分: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将变为无效(悬空)指针。

答案 4 :(得分:0)

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

你可以想象一个指针就像一张纸,你写下建筑物的数量,当你输入它时,你会发现公寓里还有数字,等等就可以了。

因此,将指针的值分配给另一个指针就像从另一张纸上写下第一篇论文中的数字一样。

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