게시글 본문내용
|
|
다음검색
연습문제(1)
//1번 1)4.5 2)300 3)100 4)100 5)200
//2번 10,20 ,20,10
//3번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { char* ps[5] = { "baseball","football","volleyball","swimming","golf" }; int ary[2][3] = { {1,2,3},{4,5,6} }; //1번 char** p; //2번 int(*p[3]); //3번 int* p; //4번 char**p; //5번 int(* p)[2][3]; } | cs |
//4번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int count_num(int(*p)[4], int(*p2)[4], int(*p3)[2]); int main(void) { int ary1[3][4] = { {15,3,9,11},{23,7,10,12},{0,17,55,24} }; int ary2[3][4] = { {13,8,9,15},{23,0,10,11},{29,17,43,3} }; int same_num[12][2]; int i, cnt; cnt = count_num(ary1, ary2, same_num); printf("일치하는 번호의 수:%d\n", cnt); printf("배열에서의 위치(행,열)...\n"); for (int i = 0; i < cnt; i++) { printf("(%d , %d)\n", same_num[i][0], same_num[i][1]); } return 0; } int count_num(int(*p)[4], int(*p2)[4], int(*p3)[2]) { int cnt = 0, k = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { if (p[i][j] == p2[i][j]) { cnt++; p3[k][0] = i; p3[k][1] = j; k++; } } } return cnt; } | cs |
5번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void input_ary(char(*p)[80]); void output_ary(char(*p)[80]); int main(void) { char ary[5][80]; input_ary(ary); output_ary(ary); return 0; } void input_ary(char(*p)[80]) { printf("다섯 개의 문장을 입력하세요.\n"); for (int i = 0; i < 5; i++) { gets(p[i]); } printf("\n"); } void output_ary(char (*p)[80]){ printf("입력된 문장은...\n"); for (int i = 0; i < 5; i++) { puts(p[i]); } } | cs |
연습문제(2)
1번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> double div(int, int); void prn(char*); int* save(int); int main(void) { //1번 double (*fp)(int, int); fp = div; //2번 void (*fp)(char*); fp = prn; //3번 int* (*fp)(int); fp = save; } | cs |
2번
1 2 3 4 5 6 7 8 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int ary[50] = { 10,20,30,40,50 }; void* vp = ary; printf("%d", ((int*)vp)[2]);//형변환 연산자가 배열 연산자보다 우선순위 낮음 return 0; } | cs |
3번 답:6
4번
1 2 3 4 5 6 7 8 9 10 11 12 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int a = 10, b = 20; int* pa = &a, * pb = &b; void* pt; pt = pa; pa = pb; pb = pt; printf("%d,%d", *pa, *pb); return 0; } | cs |
5번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void exchange(double*, double*); void func(void(*fp)(double*, double*), double, double); int main(void) { double a = 10, b = 20; func(exchange, a, b); return 0; } void exchange(double *p, double *p2) { double temp; temp = *p; *p = *p2; *p2 = temp; } void func(void(*fp)(double *p, double *p2), double a, double b){ printf("a:%.1lf , b:%.1lf\n",a,b); fp(&a, &b); printf("a:%.1lf , b:%.1lf", a,b); } | cs |
도전 실전 예제1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> void check(char(*p)[20], int i); int input_name(char(*p)[20]); void print_name(char(*p)[20], int cnt); int main(void) { char name[10][20]; int cnt; cnt = input_name(name); print_name(name, cnt); return 0; } void check(char(*p)[20], int i) { for (int j = 0; j < i; j++) { if (strcmp(p[i], p[j]) == 0) { printf("#이름이 이미 등록되었습니다.\n"); printf("이름:"); gets(p[i]); check(p, i); } } } int input_name(char(*p)[20]) { int i; for (i = 0; i < 10; i++) { printf("이름:"); gets(p[i]); if (strcmp(p[i], "end") == 0) { break; } check(p, i); } return i; } void print_name(char(*p)[20], int cnt) { printf("총 %d명이 입력되었습니다.\n", cnt); for (int i = 0; i < cnt; i++) { printf("%s\n", p[i]); } } | cs |
도전 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> void swap(char* str, void* a, void* b) { if (strcmp(str, "int") == 0) { int temp; temp = *(int*) a; *(int*)a = *(int*)b; *(int*)b = temp; } else if (strcmp(str, "double") == 0) { double temp; temp = *(double*)a; *(double*)a = *(double*)b; *(double*)b = temp; } } int main(void) { int age1,age2; double height1 ,height2; printf("첫 번째 사람의 나이와 키 입력 :"); scanf("%d %lf", &age1,&height1); printf("두 번째 사람의 나이와 키 입력 :"); scanf("%d %lf", &age2, &height2); swap("int", &age1, &age2); swap("double", &height1, &height2); printf("첫 번째 사람의 나이와 키 :%d ,%.1lf\n", age1, height1); printf("두 번째 사람의 나이와 키 :%d ,%.1lf", age2, height2); return 0; } | cs |
도전3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> void init_intro(char(*intro)[80], char** pint); int input_intro(char(*intro)[80]); void sort_intro(char** pint, int cnt); void print_intro(int mode, void* vp, int cnt); int main(void) { char intro[10][80]; char* pint[10]; int cnt; init_intro(intro, pint); cnt = input_intro(intro); sort_intro(pint, cnt); print_intro(1, pint, cnt); print_intro(0, intro, cnt); return 0; } void init_intro(char(*intro)[80], char** pint) { for (int i = 0; i < 10; i++) { pint[i] = intro[i]; } } int input_intro(char(*intro)[80]) { int i; for (i = 0; i < 10; i++) { printf("인사말 입력 :"); gets(intro[i]); if (strcmp(intro[i], "end") == 0) { break; } } return i; } void sort_intro(char** pint, int cnt) { char* temp; for (int i = 0; i < cnt; i++) { for (int j = i + 1; j < cnt; j++) { if (strcmp(pint[i], pint[j]) > 0) { //두번째 인삿말이 사전상 앞서면 temp = pint[i]; pint[i] = pint[j]; pint[j] = temp; } } } } void print_intro(int mode, void* vp, int cnt) { if (mode == 1) { printf("#사전순으로 출력...\n"); for (int i = 0; i < cnt; i++) { printf("%s\n", ((char**)vp)[i]); } printf("\n"); } else if (mode == 0) { printf("#입력순으로 출력...\n"); for (int i = 0; i < cnt; i++) { printf("%s\n", ((char(*)[80])vp)[i]); } printf("\n"); } } | cs |
|
|

첫댓글 함수포인터, void포인터의 장점은 무엇인가? 구체적인 예를 들어 설명하시오.
void포인터 장점: void포인터는 가리키는 자료형이 정해져 있지 않아 모든 주소를 저장 하여 사용 할 수 있다. 또한, 자료형에 관계없이 값을 출력할 수 있다.
예를들어 void *vp;와 같이 void포인터가 선언되어 있고 int a=10; char b=’b’;일 때 vp=&a , vp=&b와 같이 모든 타입의 주소를 저장하여 사용 할 수 있고, printf(“%d”,*(int *)vp);처럼 원하는 형태로 변환하여 사용 할 수 있다.
함수포인터 장점: 함수의 형태만 같으면 다양한 기능의 함수를 선택적으로 호출하여 사용 할 수 있다.
예를들어 int (*fp)(int,int)의 함수 포인터가있으면 함수포인터의 매개변수와 같은 매개변수를 가진 함수를 fp=sum;처럼 대입하여 사용할 수 있다.