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]);
	}
}