指向函数结构的指针,指向函数的指向typedef

时间:2013-12-29 00:42:57

标签: function pointers typedef

下面的 pointer_to_structure.c 中的代码正常,但 pointer_to_type-def.c 中的代码没有,我不明白错误。

我会感谢任何纠正代码的人。

pointer_to_structure.c

#include <stdio.h>

struct sum {
  int a,b,c;
} sum_operation,*ptr;


int main(){

  ptr = &sum_operation;

  (*ptr).a = 1;
  (*ptr).b = 3;

  (*ptr).c =(*ptr).b + (*ptr).a  ;

  printf("%d\n",(*ptr).c);

  return 0;
}

pointer_to_type-def.c

#include <stdio.h>

typedef struct sum {
  int a,b,c;
}sum_operation,*ptr;


int main(){

  ptr = &sum_operation;   //this should be changed

  (*ptr).a = 1;
  (*ptr).b = 3;

  (*ptr).c =(*ptr).b + (*ptr).a  ;

  printf("%d\n",(*ptr).c);

  return 0;
}

2 个答案:

答案 0 :(得分:1)

这应该有效

#include <stdio.h>

typedef struct sum {
int a,b,c;
} mytype;


int main(){

mytype  sum_operation;
mytype *ptr;

ptr = &sum_operation;   //this should be changed

(*ptr).a = 1;
(*ptr).b = 3;

(*ptr).c =(*ptr).b + (*ptr).a  ;

printf("%d\n",(*ptr).c);

return 0;
}

提示:使用typedef时,它会为该结构创建一个类型别名。因此sum_operation是代码中的一种结构。在固定代码中,使用typedef为结构赋予别名“mystruct”,并使用该别名类型创建对象,然后通常对其进行操作。

另外,您的评论不正确。如果只改变那个单一的陈述,代码就无法运作。

答案 1 :(得分:0)

使用时

typedef struct sum {
int a,b,c;
}sum_operation,*ptr;

相当于声明

struct sum {
    int a,b,c;
};

typedef struct sum sum_operation;

因此,sum_operation现在成为typedef。因此,您不能使用指针来获取sum_operation的地址,因为它只是一种类型。你需要使用

sum_operation another;
sum_operation *ptr;

然后你可以做

ptr = &another;