CS Study/C
7. 포인터 / 포인터 함수 배열
Ryannn
2022. 4. 6. 20:12
1. 포인터로 숫자 지정하기
#include <stdio.h>
int main(void) {
int a, b, c,temp;
int * pa = &a;
int * pb = &b;
int * pc = &c;
int * ptemp = &temp;
printf("Enter three numbers : ");
scanf_s("%d %d %d",&a,&b,&c);
printf("before : %d %d %d\n", a, b, c);
(*pa) += 1;
(*pb) *= (*pc);
(*ptemp) = (*pb);
(*pb) = (*pc);
(*pc) = (*ptemp);
printf("after : %d %d %d", *pa, *pb, *pc);
}
2. 문자열 비교
#include <stdio.h>
void det(char *a, char *b);
int main(void) {
char string1[80];
char string2[80];
char *pstring1 = &string1[0];
char *pstring2 = &string2[0];
printf("Enter two strings : ");
printf("%c", *pstring1);
scanf_s("%c %c", &string1, &string2);
det(pstring1, pstring2);
}
void det(char *a, char *b) {
if (a == b) {
printf("%c and %c are equal.");
}
else {
printf("%c and %c are not equal.");
}
}
3. 문자열 합치기 - 포인터 함수
#include <stdio.h>
char * str_cat(char *ch, char *mn) {
char *re = ch;
while (*ch != '\0') ch++;
while (*mn != '\0') *ch++ = *mn++;
*ch = '\0';
return re;
}
int main(void) {
char c[50] = "sunrin", m[] = "internet";
printf("%s \n", str_cat(c, m));
}
4. 사칙연산 - 포인터 배열 함수
#include <stdio.h>
int add(int, int);
int sub(int, int);
int mul(int, int);
int main(void) {
int(*fun[3])(int, int) = { add, sub, mul };
int ent;
int a, b;
printf("0 : Addition\n");
printf("1 : Substraction\n");
printf("2 : Multiplication\n");
printf("3 : End\n");
printf("Select the operation : \n");
scanf_s(" %d", &ent);
printf("Enter the two numbers : \n");
scanf_s(" %d %d ", &a, &b);
switch (ent) {
case 0:
printf(" %d\n", fun[0](a, b));
break;
case 1:
printf(" %d\n", fun[1](a, b));
break;
case 2:
printf(" %d\n", fun[2](a, b));
break;
case 3:
break;
}
}
int add(int a, int b) {
int c;
c = a + b;
return c;
}
int sub(int a, int b) {
int c;
c = a - b;
return c;
}
int mul(int a, int b) {
int c;
c = a * b;
return c;
}
5. 랜덤 함수 출력 - 포인터 / 배열
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand((unsigned)time(NULL));
int arr[10];
int i;
int j;
int * ptr = arr;
for (i = 0; i < 10; i++) {
arr[i] = rand() % 100 + 1;
printf(" %d ", arr[i]);
}
printf("\n");
for (j = 9; j >= 0; j--) {
printf(" %d ", * (ptr+j));
}
}
6. 소문자 / 대문자 변형
#include <stdio.h>
#include <string.h>
int checkcase(char cha);
void convertCharCase(char *sPtr);
int main(void) {
int i;
char str[200] = "PoINteR is vERy ImPorTAnt in C pRoGraMMing, SO STudEnt nEEd tO pRACtiCe usING poINTer";
for (i = 0; i < strlen(str); i++) {
printf("%c", str[i]);
}
printf("\n");
convertCharCase(str);
}
int checkcase(char cha) {
if (65 <= cha && cha <= 90) {
return 1;
}
else if (97 <= cha && cha <= 122) {
return 0;
}
}
void convertCharCase(char *sPtr) {
int a = strlen(sPtr);
int i, j;
for (i = a; i >= 0; i--) {
if (checkcase(sPtr[a - i]) == 1) {
sPtr[a - i] += 32;
}
else {
sPtr[a - i] -= 32;
}
}
for (j = 0; j < a; j++) {
printf("%c", sPtr[j]);
}
}