2016-11-21 1 views
0

C로 구조체를 가지고 놀고 있는데이 시점에서 멈추었습니다. 여기 내 코드는 다음과 같습니다C - 함수에서 구조체에 액세스하기

#include <stdio.h> 

void Test(void); 
void updateIt(struct Item* ptr); 

struct Item 
{ 
    double value; 
    int unitno; 
    int isTa; 
    int quant; 
    int minQuant; 
    char name[21]; 
}; 

int main(void) 
{ 
    Test(); // here I am gonna call updateit() function and print 
} 

void Test(void) { 
    struct Item I = { 100.10,100,10,110,10,"NAME!" }; 
    updateIt(&I); 
} 

void updateIt(struct Item* ptr){ 
    struct Item I[0] = 200 // This doesn't work — but why? 
} 

어떻게이 updateIt 함수 내에서 값에 액세스하여 { 200.20,200,20,220,20,"NAME2!"}-Item I = { 100.10,100,10,110,10,"NAME!" }의 값을 업데이트합니까?

+0

C99 복합 리터럴을 사용하면 다음과 같이 쓸 수 있습니다 :'* ptr = (struct Item) {200.20, 200, 20, 220, 20, "NAME2!"};' 'updateIt()'함수의 인자에 의해. –

답변

0

당신은

같은 PTR 값을 사용해야합니다 ptr-> unitno = 200 등 구조체의 모든 구성원에 대한

+0

감사합니다 :)하지만 strcpy에서 경고를받습니다. "경고 : 함수 'strcpy'의 암시 적 선언 – John

+0

baliman

+0

@ 존 : 'strcpy()'에 대한 경고를 받거나 'str *'functions - 디폴트 픽스는'#include '이다. 시간이 지나면 어떤 표준 함수가 어떤 헤더에 선언되어 있는지 알게 될 것입니다. '강력한 트리오'는 '', '', ''입니다.이 세 개의 헤더만으로 엄청난 양의 코드를 작성할 수 있습니다. –

1

updateIt(struct Item* ptr) 유형 항목의 포인터 ptr 받아들이; 포인터를 사용하여 구성 부품의 필드에 액세스하는 것은 다음과 같은 -> 연산자를 사용해야

void updateIt(struct Item* ptr){ 
    ptr->value = 200.20; 
    ptr->unitno = 200; 
    ptr->isTa  = 20; 
    ptr->quant = 220; 
    ptr->minQuant = 20; 
    strcpy(ptr->name, "NAME2"); 
} 
+0

어떻게하면 컴파일러 경고를 없앨 수 있습니까? – John

+0

경고 : 함수의 암시 적 선언 'strcpy' – John

+0

은 코드 파일의 시작 부분에 string.h 헤더 파일을 포함합니다. –

0

를 코드에서 :

void updateIt(struct Item* ptr){ 
struct Item I[0] = 200 // This doesn't work — but why? 
} 

이 범위 내에 변수 I 없다.

위의 함수에서 updateIt(&I);을 통해 구조의 주소를 전달 했으므로 포인터를 사용해야합니다. structureMember은 구조의 임의의 구성원

ptr->structureMember 

: 함수의 인수

포인터 변수 ptr 같이 값을 업데이트하는 데 사용될 수있는 구조의 어드레스를 갖는다.

관련 문제