将指针复制到指向C中结构内的结构的指针

时间:2011-08-31 17:33:29

标签: c pointers

有两个线程需要访问相同的全局C结构。我需要将函数中的值复制到以下结构中

typedef struct {
    struct queue ** queue1;
} my_struct;

my_struct my_queue;

my_func(struct queue ** queue2)
{
    my_queue.queue1 = queue2;
    *(my_queue.queue1) = malloc(sizeof( struct * queue));
    *(my_queue.queue1) = *queue2;
}

当我检查值时,my_queue.queue1正确指向与queue2相同的地址,但*(my_queue.queue1)不指向与* queue2相同的地址。我如何使它们相同?我需要知道两种方法。首先,我如何通过指针使它们指向相同的结构,以及如果我想制作结构的副本?

2 个答案:

答案 0 :(得分:0)

我认为您的程序无法正确编译。 sizeof(struct * queue)看起来不正确。

也许你的意思是这样的:

#include <stdio.h>
#include <stdlib.h>

struct queue { int foo;};

typedef struct {
  struct queue **queue1;
} my_struct;

my_struct my_queue;

my_func(struct queue *queue2)
{
  my_queue.queue1 = (struct queue **)malloc(sizeof(struct queue **));
  *(my_queue.queue1) = queue2;
}

int main(int argc, char **argv){
  struct queue *queue2  = (struct queue *)malloc(sizeof(struct queue *));
  queue2->foo = 3;

  printf("queue2 value is %d\n", queue2->foo);

  my_func(queue2);
  printf("queue ptrs are %ld and %ld\n",
     (long)*(my_queue.queue1), (long)queue2);
  printf("queue values are %d and %d\n",
     (*(my_queue.queue1))->foo,
     queue2->foo);

}

答案 1 :(得分:0)

为什么需要malloc作为结构: (struct queue * )malloc(sizeof(struct queue * ))

如果我需要存储指向指针的指针,我不应该使用malloc。两个变量都可以指向相同的地址。

例如:

int i = 1;
int *j = &i;
int **k = &j;

k ..

不需要malloc