#include <stdio.h> #include <string.h> struct data { int a; char *b; }; int main() { struct data aData; aData.a = 100; aData.b = (char *)malloc(10); strcpy(aData.b, "mwyun"); printf("aData.a=%d\n", aData.a); printf("aData.b=%s\n", aData.b); free(aData.b); return 0; }
#include <stdio.h> #include <string.h> struct data { int a; char *b; }; void SetData(struct data *pData) { pData->a = 100; pData->b = (char *)malloc(10); strcpy(pData->b, "mwyun"); } int main() { struct data aData; SetData(&aData); printf("aData.a=%d\n", aData.a); printf("aData.b=%s\n", aData.b); free(aData.b); return 0; }
#include <stdio.h> #include <string.h> struct data { int a; char *b; }; const char *str = "Hello, Joinc!"; void SetData(struct data *pData) { pData->a = 100; pData->b = str; // <- 주목! } int main() { struct data aData; SetData(&aData); printf("aData.a=%d\n", aData.a); printf("aData.b=%s\n", aData.b); return 0; }
#include <stdio.h> #include <string.h> struct data { int a; char *b; }; int main() { struct data *pData; pData = (struct data *)malloc(sizeof(struct data)); pData->a = 100; pData->b = (char *)malloc(10); strcpy(pData->b, "mwyun"); printf("pData->a=%d\n", pData->a); printf("pData->b=%s\n", pData->b); free(pData->b); free(pData); return 0; }
#include <stdio.h> #include <string.h> struct data { int a; char *b; }; void SetData(struct data *pData) { pData->a = 100; pData->b = (char *)malloc(10); strcpy(pData->b, "mwyun"); } int main() { struct data *pData; pData = (struct data *)malloc(sizeof(struct data)); SetData(pData); printf("pData->a=%d\n", pData->a); printf("pData->b=%s\n", pData->b); free(pData->b); free(pData); return 0; }
#include <stdio.h> #include <string.h> struct data { int Id; char *Name; void (*SetName)(struct data *pData, char *NewName); char *(*GetName)(struct data *pData); void (*Clear)(struct data *pData); }; void SetName(struct data *pData, char *NewName) { if (pData->Name) { if (strlen(pData->Name) < strlen(NewName)) { free(pData->Name); pData->Name = (char *)malloc(strlen(NewName)+1); } } else { pData->Name = (char *)malloc(strlen(NewName)+1); } strcpy(pData->Name, NewName); } char *GetName(struct data *pData) { if (pData->Name) return pData->Name; else return NULL; } void Clear(struct data *pData) { pData->Id = 0; if (pData->Name) { free(pData->Name); pData->Name = NULL; } pData->GetName = NULL; pData->SetName = NULL; pData->Clear = NULL; } int main() { struct data aData; memset((void *)&aData, 0x00, sizeof(struct data)); aData.Id = 100; aData.GetName = GetName; aData.SetName = SetName; aData.Clear = Clear; printf("aData.Id=%d\n", aData.Id); aData.SetName(&aData, "mwyun"); printf("aData.Name=%s\n", aData.GetName(&aData)); aData.Clear(&aData); return 0; }
#include <stdio.h> #include <string.h> struct data { int Id; char *Name; void (*SetName)(struct data *pData, char *NewName); char *(*GetName)(struct data *pData); void (*Clear)(struct data *pData); }; void SetName(struct data *pData, char *NewName) { if (pData->Name) { if (strlen(pData->Name) < strlen(NewName)) { free(pData->Name); pData->Name = (char *)malloc(strlen(NewName)+1); } } else { pData->Name = (char *)malloc(strlen(NewName)+1); } strcpy(pData->Name, NewName); } char *GetName(struct data *pData) { if (pData->Name) return pData->Name; else return NULL; } void Clear(struct data *pData) { pData->Id = 0; if (pData->Name) { free(pData->Name); pData->Name = NULL; } pData->GetName = NULL; pData->SetName = NULL; pData->Clear = NULL; } int main() { struct data *pData; pData = (struct data *)malloc(sizeof(struct data)); pData->Id = 100; pData->GetName = GetName; pData->SetName = SetName; pData->Clear = Clear; printf("pData->Id=%d\n", pData->Id); pData->SetName(pData, "mwyun"); printf("pData->Name=%s\n", pData->GetName(pData)); pData->Clear(pData); free(pData); return 0; }
#include <stdio.h> #include <string.h> #include <stdlib.h> struct data { int Id; char *Name; void (*SetName)(struct data *pData, char *NewName); char *(*GetName)(struct data *pData); void (*Print)(struct data *pData); void (*Clear)(struct data *pData); }; void SetName(struct data *pData, char *NewName) { if (!pData) return; if (pData->Name) { if (strlen(pData->Name) < strlen(NewName)) { free(pData->Name); pData->Name = (char *)malloc(strlen(NewName)+1); } } else { pData->Name = (char *)malloc(strlen(NewName)+1); } strcpy(pData->Name, NewName); } char *GetName(struct data *pData) { if (!pData) return NULL; if (pData->Name) return pData->Name; else return NULL; } void Clear(struct data *pData) { if (!pData) return; pData->Id = 0; if (pData->Name) { free(pData->Name); pData->Name = NULL; } pData->GetName = NULL; pData->SetName = NULL; pData->Clear = NULL; } void Print(struct data *pData) { if (!pData) return; printf("pData->Id=%d\n", pData->Id); printf("pData->Name=%s\n", pData->GetName(pData)); } struct data *Create(int Id, char *Name) { struct data *pData; pData = (struct data *)malloc(sizeof(struct data)); if (!pData) return NULL; // 함수의 시작 주소를 저장 pData->GetName = GetName; pData->SetName = SetName; pData->Print = Print; pData->Clear = Clear; pData->Id = Id; pData->SetName(pData, Name); return pData; } void Destroy(struct data *pData) { if (!pData) return; pData->Clear(pData); free(pData); pData = NULL; } int main(int argc, char **argv) { struct data *pData; if (argc != 3) return -1; pData = Create(atoi(argv[1]), argv[2]); pData->Print(pData); Destroy(pData); return 0; }
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
Contents
여러가지 포인터 예제
구조체 변수 사용 예제 1
구조체 변수 사용 예제 2
구조체 변수 사용 예제 3
구조체 포인터 변수 사용 예제 1
구조체 포인터 변수 사용 예제 2
함수 포인터 예제 1
함수 포인터 예제 2
함수 포인터 예제 3
결 론
참고문헌
Recent Posts
Archive Posts
Tags