gpt4 book ai didi

c - C 中的两个指针指向同一个结构 - 从一个指针更改结构

转载 作者:行者123 更新时间:2023-12-02 06:58:37 24 4
gpt4 key购买 nike

我正在尝试理解一些代码的逻辑并了解它们对指针的使用。

例如,如果声明了两个指向结构的指针(比如 A 和 B)并且它们彼此相等,然后通过其中一个指针更改结构中的数据,它是否也在第二个指针中更改或只是重写?我想我的问题是:A 和 B 会从字面上指向同一事物,还是一个指向另一个的副本?

代码是这样的:

 somestruct *A;
somestruct *B;
B = A;
A->data = 5;
B->data = 6;

最佳答案

在您上面的示例中,它们实际上指向同一事物。

然而,在使用前后分配和释放内存也很重要,否则您会遇到意外行为和/或段错误。

somestruct *A;
somestruct *B;

A = malloc(sizeof(somestruct));

B = A;
A->data = 5;
B->data = 6;

printf("Data in A: %d", A->data); /* Prints 6 */
printf("Data in B: %d", B->data); /* Also Prints 6 */

...

free(A);

检查 malloc 的结果并确保操作成功也是一种很好的做法。例如,如果您想更改 A 指向的位置,并且还想更改 B 指向的位置,这种情况可能会成为一个问题。除非您更改两者,否则更改一个指针位置不会更新另一个。这是使用双指针的地方。 EG

somestruct *A;
somestruct **B;

A = malloc(sizeof(somestruct));
B = &A; // Get the address of A

A->member = 5;
printf("Member: %d", (*B)->member); /* Prints 5 */

free(A);
A = malloc(sifeof(somestruct));
A->member = 10;
printf("Member: %d", (*B)->member); /* Prints 10 */

请注意,在双指针示例中,B 不需要再次更新。

请参阅此处示例:Double Pointer

关于c - C 中的两个指针指向同一个结构 - 从一个指针更改结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com