2014-03-26 2 views
0

구조체 멤버를 함수에 전달하고 싶습니다. 내가하지 '변수 구조체 멤버 함수 전달하기

int pop(int head,int n) 
{ 
if(head==n) 
    return 1; 
else head++; 
} 

내가 돈 때문에

를 구조체

struct student { 
char name[50]; 
int semester; 
}; 

struct prof { 
char name[50]; 
char course[50]; 
}; 

struct student_or_prof { 
    int flag; 
    int size; 
    int head; 
    union { 
    struct student student; 
    struct prof prof; 
    } 
}exp1; 
struct student_or_prof *stack; 
struct student_or_prof exp2; 

변수와 fucntion에 자신의 회원을 전달하려면이 구조체를 원하는

struct smth 
{ 
    int n; 
}; 

void funct(struct smth s); 

: 그 같은 것을 의미하지 않는다 struct에 대해서만 함수를 사용하고 싶습니다. 가능한가?

EDIT 숫자도 변경해야하며 반환하지 말고 포인터와 같은 것을 원합니다.

EDIT_2 또한 나는이 pop (exp1.head, n)이 작동한다는 것을 알고 있지만, 함수 팝업이 끝난 후에도 exp1.head를 변경하고 싶습니다.

+0

struct 변수의 주소를 전달하여 사용할 수 있습니다. 포인터보다 다른 방법이 필요해? – LearningC

+0

나는 가능한 모든 방법을 원하지만, 나는 또한 구조체의 멤버의 번호가 내가 포인터를 언급 한 이유를 바꾸기 위해서도 함수를 보내기를 원한다. – valkon

답변

2

포인터 사용 내부 union 정의 후, exp1.head과 같은 기능에를 역 참조하여 조작 할 수 poniter, 같은

int pop(int * head,int n) 
{ 
if(*head==n) 
    return 1; 
else (*head)++; 
} 

통화 기능, 첫째, 세미콜론 누락

pop(&exp1.head,n); 
+0

예! 정확히 내가 원하는 걸 – valkon

1

먼저 물건을 전달합니다 struct student_or_prof.

편집 # 2에 따라 변수의 주소를 전달하고 함수에 의해 변수에 대한 포인터로 가져온 다음 주소의 내용을 편집/증분 (포인터가 가리키는 변수). 다음과 같은 :

#include <stdio.h> 

struct student_or_prof { 
    int head; 
} exp1; 

int pop(int * head, int n) { 
    if (*head == n) 
     return 1; 
    else (*head)++; 
} 

int main(){ 

    int returnval; 

    exp1.head = 5; 
    returnval = pop(&exp1.head, 10); 
    printf("%d", exp1.head); 

    getchar(); 
    return 0; 
} 

이것은 6를 인쇄합니다. 여기에 의 주소를 전달하므로 함수 pop은 실제 가지고있는 exp1.head을 참조 할 수 있습니다. 그렇지 않으면 popexp1.head의 값에 대해서만 알리고 해당 값을 head 변수에 복사하고 그 값을 가지고 놀 수 있습니다.

어떤 경우에도 에서 int을 반환하는 것이 좋습니다. 지금은 *head == n이 만족 될 때만 값을 반환하고 이해할 수없는 것을 반환합니다. 나는 당신이 그것을 원할 것이라고 생각하지 않는다. 그래서 :

... 
else { 
    (*head)++; 
    return 0; 
} 
... 

더 좋을 것이다.

*head 주변의 괄호가 좋지 않은 경우에는 역 참조 연산자 대신 *보다 우선 순위가 낮은 후행 증분 대신 ... += 1;을 사용할 수 있습니다.