2014-11-03 26 views
1

有人可以指出这个指向结构的指针的错误是什么?如何在这种情况下正确地分配一个指向结构变量的指针?

简要背景 - 我有一个称为分数的结构,我有两个类型分数的变量(f1 & f2)。我也有一个名为num的结构数组。直到我试图创建一个类型为struct fraction的指针并将它分配给f1的地址时,它一直运行良好。

#include <stdio.h> 

struct fraction 
{ 
    int nume; 
    int deno; 
}; 

struct fraction *fp; 
struct fraction f1,f2; 
struct fraction num[3]; 
fp=&f1; 

int main() 
{ 
    f1.nume=22; 
    f1.deno=7; 
    int i,x=5,y=6; 
    f2=f1; 

    printf("\n Fraction 1 numerator is: %d\n", f1.nume); 
    printf("\n Fraction 1 denominator is: %d\n", f1.deno); 

    printf("\n Fraction 2 numerator is: %d\n", f2.nume); 
    printf("\n Fraction 2 denominator is: %d\n", f2.deno); 

    //initialize array of structs 
    for(i=0;i<3;i++) 
    { 
     num[i].nume=x; 
     num[i].deno=y; 
     ++x; 
     ++y; 
    } 

    //print out array of structs 
    for(i=0;i<3;i++) 
    { 
     printf("\n Numerator of fraction num %d : %d", i, num[i].nume); 
     printf("\n Denominator of fraction num %d : %d\n", i, num[i].deno); 

    } 

    //try to use pointer to access field 
    printf("\n Numerator of fraction f1 : %d\n", fp->nume); 
    printf("\n"); 
} 

我想指针能分到以下为int指针赋值的一般规则的结构类型的变量,漂浮等。对于实例 - 你可以这样做:

int x=10; 
int *y; 
y=&x; 

这点的指针y指向变量x的地址。

然后,遵循相同的逻辑,为什么上面的代码不起作用?我尝试在线验证我的方法,从这篇文章中可以看出,它几乎是一样的。这里是我得到的错误:

struct1.c:21:1: warning: type specifier missing, defaults to 'int' 
     [-Wimplicit-int] 
fp=&f1; 
^~ 
struct1.c:21:1: error: redefinition of 'fp' with a different type: 'int' vs 
     'struct fraction *' 
struct1.c:17:18: note: previous definition is here 
struct fraction *fp; 
      ^

非常感谢您的帮助!

+2

这样的表达('FP = &f1;')不能写在函数之外。 – BLUEPIXY 2014-11-03 10:47:13

回答

2
struct fraction *fp; 
struct fraction f1,f2; 
fp=&f1; 

确实是类似于

int x=10; 
int *y; 
y=&x; 

但是,你有没有试着用外部的任何功能,后者y=&x;像你fp=&f1;做了什么?这不会被编译,因为对于这两个示例而言,将分配放在那里是不合法的。

解决方案很简单:将fp=&f1;放入一个函数中,如main

+0

我的天啊,我希望我看到这个2小时前大声笑...谢谢! – mgrenier 2018-03-01 17:54:26

1

由于@Yu浩建议要么你可以把fp=&f1;在函数内部,像main 或者

您可以更改您的代码:

struct fraction f1,f2; 
struct fraction *fp = & f1; 
struct fraction num[3]; 
相关问题