연재 완료/C Lang 예제코드 모음

C언어 포인터 주요 예제

라이피 (Lypi) 2018. 5. 24. 00:28
반응형

임의의 문자열을 입력받고, 거꾸로 출력하는 프로그램.

#include <stdio.h>
#include <string.h>

int main()
{
	char buffer[80];
	char *p = buffer; // char형 포인터 p에 char형 배열 buffer의 시작 위치를 대입
	int len;
	
	printf("Input String : "); scanf_s("%s", buffer,80);
	len = strlen(p); // 시작위치부터 NULL문자가 나올때까지의 값을 리턴함.

	while (*p) { //*p의 값이 문자일 경우 0이 아닌 값으므로 참이고, NULL일경우 0으로 거짓이 되므로 while문을 빠져나간다.
		p++; //p가 가리키는 위치를 마지막으로 보낸다.
	} 

	printf("Inverse String : ");

	for (int i = 0; i < len; i++) {
		p--; 
		putchar(*p);
	} //p가 가리키는 위치를 한칸씩 당기면서 한글자씩 출력.
	putchar('\n');
}

같은 작동을 하지만 조금 변경한 것

#include <stdio.h>

int main()
{
	char buffer[80];
	char *p = buffer; // char형 포인터 p에 char형 배열 buffer의 시작 위치를 대입
	int len = 1;
	
	printf("Input String : "); scanf_s("%s", buffer,80);

	while (*p) { //*p의 값이 문자일 경우 0이 아닌 값으므로 참이고, NULL일경우 0으로 거짓이 되므로 while문을 빠져나간다.
		p++; //p가 가리키는 위치를 마지막으로 보낸다.
		len++;
	} 

	printf("Inverse String : ");

	for (int i = 0; i < len; i++) {
		putchar(*--p); // *--p가 된다. 
	} //p가 가리키는 위치를 한칸씩 당기면서 한글자씩 출력.
	putchar('\n');
}



배열을 포인터로 활용하는 예제1

#include <stdio.h>

int main()
{
	int arr[] = { 5,8,3 };
	int s = 1, *p;

	p = &arr[0]; // p = arr; 이라 쳐도 동일하다.

	for (int i = 0; i < 3; i++) {
		printf("arr[%d] = %d \n", i, arr[i]);
	}

	for (int i = 0; i < 3; i++) {
		s = s * *(p + i);	//앞의 *는 곱하기, 뒤의 *는 포인터 연산자
	} //int *p = arr 일 때, *(p+i) == p[i]와 동일하다.
	printf("\n arr[0] * arr[1] * arr[2] = %d \n", s);
}


배열을 포인터로 활용하는 예제2

#include <stdio.h>

int main()
{
	int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
	int w = 0, *p = arr;

	for (int i = 0; i < 10; i++) {
		printf("arr[%d] = %d \n", i, arr[i]);
	}

	for (int i = 1; i < 10; i += 2) {
		w += *(p + i);
	}

	printf("\narr[1] + arr[3] + arr[5] + arr[7] + arr[9] = %d \n", w);
}


배열을 포인터로 활용하여 최대값과 최소값을 찾는 예제

#include <stdio.h>

int main()
{
	int arr[] = { 34,-67,25,43,-69,29 };
	int *p, max = arr[0], min = arr[0];
	int maxloc, minloc;

	p = arr;
	printf("arr[] = {");
	
	for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {
		if (*(p + i) > max) {
			max = *(p + i);
			maxloc = i + 1;
		}
		if (*(p + i) < min) {
			min = *(p + i);
			minloc = i + 1;
		}
		printf(" %d ", *(p + i));
	}

	printf("} \n");

	printf("최댓값 : %d, 위치 : %d \n", max, maxloc);
	printf("최솟값 : %d, 위치 : %d \n", min, minloc);
}


포인터로 함수에 문자열을 전달해서 교환하는 예제.

void Change(char* x, char* y);

int main()
{
	static char a[] = "abcdefg";
	static char b[] = "1234567";

	printf("Before Change \n");
	printf("-------------------------\n");
	printf("a[] = %s \n", a);
	printf("b[] = %s \n", b);

	printf("\n");
	Change(a, b);

	printf("After Change \n");
	printf("-------------------------\n");
	printf("a[] = %s \n", a);
	printf("b[] = %s \n", b);
}

void Change(char* x, char* y)
{
	char temp;

	while (*x) {
		temp = *x;
		*x = *y;
		*y = temp;

		x++; y++;
	}
}


포인터로 함수에 문자열을 전달해서 소문자를 대문자로, 대문자는 소문자로 바꾸는 예제

#include <stdio.h>

void chUp(char* ptr);

int main()
{
	char arr[100];
	printf("소문자를 대문자로 바꿀 문자열을 입력하세요 : "); scanf_s("%s", arr, 100);

	chUp(arr);

	printf("바꾼 문자열은 %s 입니다", arr);
}

void chUp(char* ptr)
{
	while (*ptr) {
		if ('a' <= *ptr &&  *ptr <= 'z') {
			*ptr -= 32;
		} else 
		if ('A' <= *ptr &&  *ptr <= 'Z') {
			*ptr += 32;
		}

		ptr++;
	}
	
}


두 문자열에서 같은 위치에 나타나는 문자들을 찾는 예제

#include <stdio.h>


int main()
{
	char arrx[20], arry[20];
	char *xp, *yp;

	printf("첫번째 문자열을 입력하세요 : "); scanf_s("%[^\n]s", arrx, 20);

	while (getchar() != '\n') {}

	printf("두번째 문자열을 입력하세요 : "); scanf_s("%[^\n]s", arry, 20);

	xp = arrx; yp = arry;

	printf("\n");

	int i = 1;

	while (!(*xp == '\0' && *yp == '\0')) {
		if (*xp == *yp) {
			printf("같은 글자 : %c, 위치 : %d \n", *xp, i);
		}
		xp++; yp++; i++;
 	}

}

일요일로부터 n일이 지난 날의 요일을 반환하는 프로그램
#include <stdio.h>

const char* DayName(int n)
{
	const char* day[] = { "일", "월", "화", "수", "목", "금", "토" };
	return day[n];
}

int main()
{
	int n;

	printf("일요일부터 n일 지난 날의 요일을 확인합니다. \n");
	printf("n값을 입력하세요 : "); scanf_s("%d", &n);

	printf("일요일로부터 %d일 지난 날은 %s요일 입니다.\n", n, DayName(n % 7));
}


입력된 알파벳으로 시작하는 과일이름을 출력하는 프로그램

#include <stdio.h> const char* fruit(char s) { switch (s) { case 'a': return "apple"; case 'b': return "banana"; case 'o': return "orange"; case 's': return "strawberry"; case 'g': return "grape"; case 'p': return "pineapple"; case 't': return "tomato"; default: return "Fruit name is not exist!!!"; } } int main() { char str[2]; do { printf("input first one character : "); scanf_s("%c", str,2); if (*str == 'q' || *str == 'Q') { return 0; } printf("fruit = %s \n",fruit(*str)); while (getchar() != '\n') {} } while (1); }


자동차 메이커와 자동차 이름을 각각 포인터 배열로 선언해놓고, 메이커에 해당하는 자동차 이름을 출력.
#include <stdio.h>
#include <string.h>

const char* maker(int n);

const char* car(int n);

int main()
{
	char str[20];
	int k = 0;

	printf(" Maker => "); scanf_s("%s", str, 20);

	while (k < 4) {
		if (!strcmp(str, maker(k))) {
			printf("car name => %s \n", car(k));
			return 0;
		}
		k++;
	}

	printf("일치하는 메이커가 없습니다. \n");
}

const char* maker(int n)
{
	const char* MakerName[] = { "KIA", "HYUNDAI", "DAEWOO", "SSANGYONG" };
	return MakerName[n];
}

const char* car(int n)
{
	const char* CarName[] = { "pride", "sonata", "espero", "korando" };
	return CarName[n];
}


함수 포인터 사용 예제

#include <stdio.h>
#include <math.h>

double sigma (double(*tring_func) (double), double dLower, double dUpper);

int main()
{
	double dSum;
	
	dSum = sigma(sin, 0.1, 1.0);
	printf("The Sum of the sine from 0.1 to 1.0 is %g \n", dSum);

	dSum = sigma(cos, 0.5, 3.0);
	printf("The Sum of the cosine from 0.5 to 3.0 is %g \n", dSum);
}

double sigma(double(*tring_func) (double), double dLower, double dUpper)
{
	double dCount, dTotal = 0.0;

	for (dCount = dLower; dCount <= dUpper; dCount += 0.1) {
		dTotal = dTotal + tring_func(dCount);
	}
	return dTotal;
}


반응형