특정 작업을 수행하는 코드의 집합
void > return 값 없음을 의미한다
ex) (int a, int b)
/*
데이터 타입 함수이름(매개 변수) {
함수 내용
}
*/
int Plus(int a, int b) {
return a + b;
}
프로그래밍 언어가 제공하는 기본 함수
사용자가 직접 정의한 함수
선언한 함수 블록
{}
안에서만 사용 가능한 변수
함수 밖에 선언된 변수
함수 블록
{}
안과 밖 모두 선언 할 수 있는 변수
같은 타입을 가진 변수들을 나열한 것
int arr[100]
> 타입이 정수인 변수 100개 선언arr[0], arr[1] ...
// 배열의 타입 배열의 이름[길이]
int arr[100]
{}
를 이용하여 쉽게 초기화할 수 있다 int arr[5] = {1, 2, 3, 4, 5}
arr2[5] = arr1[5]
와 같은 방식으로 복사할 수 없다#include <studio.h>
int main()
{
int arr1[5] = {1, 2, 3, 4, 5};
int arr2[5];
for(int i = 0; int < 5; int++) {
arr2[i] = arr1[i];
}
return 0;
}
char str[100] = "Beautiful";
특정 변수의 주소값만을 가리키는 변수
크롬 원격 데스크톱을 이용하여 집에서 회사 컴퓨터를 제어하는 것과 같다
int main()
{
int b = 100;
int *pB = &b; // 포인터 선언(*)
printf("b = %d\n", b);
printf("b = %p\n" &b); // 주소연산자(&)
// printf 안의 * : 포인터 변수가 가리키는 변수의 메모리에 저장된 값을 가져온다
printf("*pB = %d\n", *pB);
return 0;
}
/* 출력값
b = 100
&b = 0x7ffffde8950c
pB = 0x7ffffde8950c
*pB = 100
*/
int main()
{
int arr[] = {1,2,3,4,5};
for(int i = 0; i < 5; i++) {
printf("%p\n", &arr[i]);
}
printf("배열의 이름 : %p\n", arr);
return 0;
}
/* 출력값
0x7ffef92f3a60
0x7ffef92f3a64
0x7ffef92f3a68
0x7ffef92f3a6c
0x7ffef92f3a70
배열의 이름 : 0x7ffef92f3a60
*/
// 타입(*함수 포인터 이름)(인자 목록)
int (*func)(int a);
#include <stdio.h>
int Plus(int a, int b) {
return a + b;
}
int Minus(int a, int b) {
return a - b;
}
int main()
{
int a = 20;
int b = 10;
int select = 0;
int (*fPtr)(int pa, int pb);
while(1)
{
scanf("%d", &select);
// 어떤 함수의 주소를 가리키느냐에 따라
// 결과값이 달라짐
switch(select) {
case 1:
fPtr = Plus;
break;
case 2:
fPtr = Minus;
break;
case 3:
return 0;
default:
break;
}
// 코드는 바꾸지않고 포인터만 바꿔줌으로써
// 결과가 달라짐
int result = fPtr(a, b);
printf("결과값 : %d\n", result);
}
return 0;
}
Visual Studio Code의 extension기능
이 있다extension기능
들은 플러그인 방식으로 동작하는데, 새로운 기능을 추가할 때 마다 다시 컴파일 해야하는 불편함을 없앨 수 있다