访问另一个结构内的结构的指针

时间:2014-04-04 07:47:43

标签: c pointers struct

这应该是C编程中的基本问题,但我在访问放置在另一个结构中的结构的指针时感到困惑:我有以下两种结构:

struct header{
char version;
Bucket *bucket;
};

struct Bucket{
int length;
};

现在,我如何访问结构Bucket变量" length"在标题对象头的帮助下,定义为

struct header head;

如果它是一个简单的结构变量,那么我可以通过 dot 运算符访问它,但这是一个指针,所以有人可以帮助我吗?它是一个基本的结构层次结构,但我有一个很大的混乱。

7 个答案:

答案 0 :(得分:2)

简单使用->运算符。 请注意,您首先必须将bucket指针设置为有效值,否则您可能会收到访问冲突错误。

例如:

struct header head;
struct Bucket bucket;
head.bucket = &bucket;

// then access it via head
head.bucket->length;

您也可以手动分配存储桶,但是您不应忘记free它。

此外,如果您还没有header桶,则应使用struct Bucket* bucket;定义typedef结构。

答案 1 :(得分:0)

你可以使用它。

head.bucket->length

答案 2 :(得分:0)

head  

应该清楚

head.bucket

给你指针。
如果你只有一个指针桶,你将如何访问长度?

bucket->length 

组合:

head.bucket->length 

就这么简单。

答案 3 :(得分:0)

您可以通过以下方式访问它:

    head.bucket->length

同样在结构头的声明中,它应该是:

    struct Bucket *bucket;

答案 4 :(得分:0)

使用.

访问标题结构中的存储桶指针
head.bucket

现在,bucket是一个指针,因此可以访问->

指向的内容
head.bucket->length

答案 5 :(得分:0)

head.bucket->length

bucket是head head.bucket的成员,现在该成员是指向结构的指针head.bucket->length

在使用bucket指针之前,应将其初始化为有效地址。

Bucket B;
head.bucket=&B;
head.bucket->length=0;// Example statement

答案 6 :(得分:0)

你应该同时使用点和箭头:

#include <stdio.h>
struct Bucket {
  int length;
};
struct header{
  char version;
  struct Bucket *bucket;
};

int main(int argc, char **argv) {
  struct header head;
  head.version = 'a';
  head.bucket = (struct Bucket *)calloc(1,sizeof(struct Bucket));
  head.bucket->length = 2;
  printf("%d\n", head.bucket->length);
  //delete head
};