나는 구조체가 :링크 된 목록에있는 구조체에 int 값을 변경
struct person{
char* name;
char* surname;
int age;
};
을 그리고 링크 된 목록에 대한 또 다른 구조체 내부에이 구조체를 사용 : 나는 삽입하려고
struct listNode {
struct person data;
struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;
을 하나의 구조체가 연결된 목록에 추가됩니다. 그 후이 구조체를 인덱스로 가져 와서 나이 값을 변경하려고합니다. 주에는 다음 코드가 있습니다.
int main() {
ListNodePtr startPtr = NULL;
struct person p;
p.age = 22;
p.surname = "Pilkington";
p.name = "Anthony";
insert(&startPtr, p);
printf("Age1:%d\n", p.age);
struct person p2 = getStruct(&startPtr, 0);
p2.age++;
printf("Age2:%d\n", p2.age);
struct person p3 = getStruct(&startPtr, 0);
printf("Age3:%d\n", p3.age);
return 0;
}
이제 삽입 기능과 getStruct 기능이 올바르게 작동합니다. 하지만 나이 값을 늘릴 수는 없습니다. 내 출력은 다음과 같습니다
Age1:22
Age2:23
Age3:22
내가 삽입 기능에서 Age3 (23)을 만들고 싶어, 내가 처음 값을 변경할 수없는 이유를 나는 이미의 malloc으로 메모리를 할당하지만? 목록에서 노드를 제거하거나 추가하지 않고이 값을 어떻게 변경할 수 있습니까?
제목을 검색하지만 원하는 답을 찾을 수 없습니다. 그래서, 내가 도와 주시면 감사하겠습니다.
--- 편집 ----- 죄송합니다 getStruct 방법을 게시하지, 나는 아래에 추가 오전 : 여기
struct person getStruct(ListNodePtr *sPtr, int index) {
ListNodePtr currentPtr;
struct person c;
int counter = 0;
currentPtr = *sPtr;
while (currentPtr != NULL) {
if (counter == index) {
c = currentPtr->data;
}
counter++;
currentPtr = currentPtr->nextPtr;
}
return c;
}
정확하게 말하면, op 구조체의 주소를'getStruct' 함수에서 반환해야합니다. – sjsam
함수를 추가했습니다. 명확한 대답을 주셔서 감사합니다, 그래서'getStruct' 함수는'struct person *'을 리턴해야한다고 생각합니다. – pilkington
@ pilkington : 그렇습니다. 간단히'return & currentPtr-> data'를 사용할 수 있습니다. –