2014-11-03 5 views
1

구조체에 대한 포인터의 할당에서 오류가 무엇인지 지적 해주세요.이 경우 구조체 변수에 포인터를 올바르게 할당하는 방법은 무엇입니까?

간략한 배경 - 나는 분수라는 구조를 가지고 있는데, 분수 형의 두 변수 (f1 & f2)가 있습니다. 또한 num이라는 구조체가 있습니다. 내가 struct 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; 

이가 포인트 변수 x의 주소에 y 포인터.

그런 다음 동일한 논리에 따라 위의 코드가 작동하지 않는 이유는 무엇입니까? 나는 나의 방법을 온라인으로 확인하려고 노력했다. 그리고이 eskimo.com 기사에서, 그것은 거의 같은 것을 말한다. 다음과 같은 오류가 발생합니다.

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

답변

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

당신은 당신이 fp=&f1;했던 것처럼 모든 기능을 외부 후자 y=&x;를 사용하려고 않았다

그러나
int x=10; 
int *y; 
y=&x; 

에 참으로 유사하다? 두 예제 모두에 할당이 적법하지 않기 때문에 컴파일되지 않습니다.

해결책은 간단합니다. main과 같은 함수 안에 fp=&f1;을 넣습니다.

+0

나의 선량 나는 이것을 2 시간 전에 보았 더라면 좋겠다. LOL ... 고마워! – mgrenier

1

@Yu 하오 당신이

당신은 당신의 코드를 변경할 수 main 또는

처럼, 함수 내에서 fp=&f1;를 넣을 수 있습니다 제안으로 :

struct fraction f1,f2; 
struct fraction *fp = & f1; 
struct fraction num[3]; 
관련 문제