C/C 연습

C 포인터 예제

HicKee 2022. 10. 5. 13:28
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int opration(int a, int b, char n);
void opration2(int a, int b, char n, int res);
void opration3(int a, int b, char n, int *res);

int main() {

	//포인터와 변수

	char ch = 'A';

	char* p = NULL;
	p = &ch; // 주소값을 대입
			 //char* p = &ch;

	printf("ch가 가지는 값 : %c\n", ch);
	printf("ch 주소 값 : %p\n", &ch);
	printf("p가 가지는 값 : %p\n", p);
	printf("p가 참조하는 주소의 데이터 값 : %c\n", *p);

	//포인터 변수 p = 주소(참조하는 ) 
	//			*p = 데이터 값
	// ch와 *p는 동일한 정보를 가지고 있다.
	
	//포인터와 배열
	int arr[] = { 10,20,30,40 };
	int* pArr = arr;
	//배열의 이름은 주소를 가지고 있다 &(주소연산자)를 쓰지 않는 다.

	printf("pArr[0] = %d\n", pArr[0]);
	//배열처럼 사용할 수 있다.
	printf("*pArr = %d\n", *pArr);
	//주소 참조 이후에 *이 붙게되면 값 *이 없으면 주소
	printf("*(pArr + 0) = %d\n", *(pArr + 0));

	printf("*(pArr + 2) = %d\n", *(pArr + 2));

	int num1 = 0, num2 = 0;
	char op = 0;
	printf("숫자를 입력하세요\n");
	scanf("%d %d", &num1, &num2);
	printf("연산자를 입력\n");
	scanf(" %c", &op);

	printf("opration 결과 : %d\n", opration(num1, num2, op));

	int result = 0;

	opration2(num1, num2, op, result);

	printf("main result : %d\n", result);


	opration3(num1, num2, op, &result); //매개변수가 *int res 주소값을 필요 &을 붙여줌
	
}

int opration(int a, int b, char n) {

	int result = 0;

	if (n =='+') {
		result = a + b;
	}
	else if(n == '-') {
		result = a - b;
	}
	else if (n == '*') {
		result = a * b;
	}
	else if (n == '/') {
		result = a / b;
	}
	else {
		printf("연산자가 아님");
	}
	return result;
	
}

void opration2(int a, int b, char n, int res) {

	if (n == '+') {
		res = a + b;
		printf("opration2 안에 res 값 : %d\n", res);
	}
}


//함수에서 사용되는 변수의 값을 가지기 위해서는 return, 그리고  * 포인터 변수를 사용해야한다.
void opration3(int a, int b, char n, int *res) { // int *res 에는 주소값이 들어와야함 

	if (n == '+') {
		*res = a + b;
		printf("opration2 안에 res 값 : %d\n", *res);
	}

}

'C > C 연습' 카테고리의 다른 글

C 비트 연산자 사용  (0) 2022.10.11
C 포인터 배열 접근 1  (0) 2022.10.04
C 포인터 연습  (0) 2022.10.04
C 음료수 선택 _ 일단은 자판기  (0) 2022.09.29
C 3500원 모두 소진 하는 가지 수  (0) 2022.09.28