본문 바로가기
반응형

C언어122

[C언어] 포인터의 포인터의 포인터 (다중 포인터) 포인터는 삼중 이상의 다중 포인터도 가능합니다. 어떤 변수의 주소를 저장하는 포인터의 주소를 저장하는 포인터의 주소를 저장하는 포인터의 주소를 저장하는.....포인터 아래는 삼중포인터 예시입니다. #include int main(void) { int num=3; int *p_num=# int **p_p_num=&p_num; printf("%p\n",p_num); printf("%p\n",p_p_num); printf("%p\n",*p_p_num); } 2022. 4. 7.
[C언어] 포인터의 포인터 포인터변수는 어떤 변수의 주소를 저장합니다. 포인터변수에도 주소가 있는데요. 포인터 변수의 주소를 저장하는 포인터는 포인터의 포인터입니다. 이를 이중포인터라과 부릅니다. **를 붙여서 정의합니다. #include int main(void) { int num=3; int *p_num=# int **p_p_num=&p_num; printf("%p\n",p_num); printf("%p\n",p_p_num); printf("%p\n",*p_p_num); } 2022. 4. 1.
[C언어] 다차원 배열 (2차원 배열) 2차원 이상의 배열을 만들 수 있습니다. 2차원 배열은 아래와 같이 선언합니다. int arr2[3][2] 3행 2열의 배열을 뜻합니다. 선언과 동시에 초기화하는 방법은 아래와 같습니다. #include int main(void) { int arr2[3][2]={ {1,2},{3,4},{5,6} }; } 아래 배열을 만든 것입니다. 1 2 3 4 5 6 일부를 비워두면 0으로 초기화됩니다. 2022. 3. 31.
[C언어] scanf 에서 숫자 입력과 문자열 입력 scanf 에서 숫자를 입력받을 때는 주소 연산자 &를 붙이고 문자의 경우는 붙이지 않습니다. #include int main(void) { int num; char str[10]; scanf("%d", &num); scanf("%s", str) } 숫자 입력을 받을 때 &를 붙이는 이유는 주소에 접근해서 값을 넣어주기 위함입니다. 주소에 접근하지 않고 값을 입력하면 함수에서 지역변수가 바뀔 뿐입니다. 문자열은 그 자체가 배열의 주소값입니다. &를 붙일 필요가 없습니다. 2022. 3. 31.
[C언어] 함수의 인자로 배열을 입력받을 때 다른 형태의 선언 함수의 인자로 배열을 입력받을 때 아래와 같이 한다고 배웠습니다. void PrintArr(int *p_ar) *연산자로 포인터변수를 선언해서 배열의 주소를 가져오는 것인데요. 아래와 같이 선언해도 됩니다. void PrintArr(int p_ar[ ] ) p_ar[ ] 을 다른 경우에 사용할 수는 없습니다. 함수의 인자로 받는 경우만 가능합니다. 2022. 3. 31.
[C언어 함수의 인자로 배열 입력받기 배열의 값을 함수 인자로 넣는 것을 불가능하다. 포인터 변수를 이용하여 배열 인자의 주소값은 받을 수 있다. 입력받은 주소값을 이용하여 배열의 값에 접근하는 것은 가능하다. 아래 예시는 배열의 주소를 입력받아 배열 값을 출력하는 함수이다. #include void PrintArr(int *p_ar,int length) { int i; for(i=0; i < length; i++) { printf("%d\n",p_ar[i]); } } int main(void) { int ar[3]={1,2,3}; PrintArr(ar,sizeof(ar)/sizeof(int)); } 2022. 3. 31.
[C언어] 포인터 변수의 크기는 그냥 포인터의 크기이다 배열의 주소가 저장된 포인터 변수의 크기는 배열의 크기와 다릅니다. 64비트 운영체제에서 포인터 변수의 크기는 8바이트입니다. #include int main(void) { int ar[3]={1,2,3}; int *p_ar=ar; printf("%ld\n",sizeof(ar)); printf("%ld\n",sizeof(p_ar)); } 2022. 3. 31.
[C언어] 포인터 배열 포인터를 배열 형태로 만드는 것도 가능하다. 배열의 각 요소는 주소값을 갖는다. #include int main(void) { int num1=1; int num2=2; int num3=3; int *ar[3]={&num1,&num2,&num3}; printf("%p\n",ar[0]); printf("%d\n",*ar[0]); printf("%p\n",ar[1]); printf("%d\n",*ar[1]); } 2022. 3. 31.
[C언어] 포인터 연산의 활용 배열 ar 이 있고, 이 배열 주소를 포인터 p_ar 에 저장했다고 하자. 이때 아래 세 코드의 의미가 같다 . ar[i]==*(ar+i)==*(p_ar+i) ar은 주소이고, i가 더해지면 i번째 요소의 주소가 된다. 해당 주소가 가리키는 값에 * 를 이용하여 접근하면 결국 ar[i] 과 같아진다. 아래는 예시이다. #include int main(void) { int ar[3]={10,20,30}; int *p_ar=ar; printf("%d\n",*(ar+1)); printf("%d\n",*(p_ar+1)); printf("%d\n",ar[1]); } 2022. 3. 31.
[C언어] 포인터의 연산 int 형 포인터에 1을 더하면, 값이 4 증가한다. 크기만큼 증가하는 것이다. double 이라면 8이 증가할 것이다. 아래는 예시이다. #include int main(void) { int num=3; int *p_num=&num; printf("%p\n",p_num); printf("%p\n",p_num+1); printf("%p\n",p_num+2); printf("%p\n",p_num+3); } 2022. 3. 31.
[C언어] 포인터를 배열 이름처럼 사용 배열 이름은 포인터입니다. 포인터변수를 하나 만들고 배열 이름을 입력하면 해당 포인터변수를 배열 이름처럼 사용할 수 있습니다. int main(void) { int ar[2]={10,20}; int *p_ar=ar; printf("%p\n",p_ar); printf("%d",p_ar[0]); } 배열 ar 을 p_ar 에 입력하면 배열 ar의 주소가 포인터변수 p_ar에 할당됩니다. 배열 ar 자체가 주소였는데, p_ar 도 같은 주소이므로 p_ar 을 ar처럼 사용할 수 있게 된 것입니다. 2022. 3. 30.
[C언어] 배열의 이름은 포인터 배열의 이름은 포인터입니다. 배열의 이름을 출력하면 주소가 출력됩니다. 아래와 같습니다. 주소가 가리키는 값에 접근하는 *연산자도 사용가능합니다. #include int main(void) { int ar[2]={10,20}; printf("%p\n",ar); printf("%p\n",&ar[0]); printf("%p\n",&ar[1]); printf("%d\n",*ar); printf("%d\n",*&ar[0]); printf("%d\n",*&ar[1]); } 2022. 3. 30.
c언어 조건문,반복문,함수 한눈에 보기 while (조건) {명령} for (초기값; 조건식; 변화식 ) {명령} if (조건) {명령} else if (조건) {명령} else {명령} 반환형 함수이름 (변수) {내용} 2022. 3. 30.
[C언어] 포인터란 무엇인가 어떤 변수가 정의되면 저장공간을 할당받습니다. 각 저장공간에는 고유한 주소가 있는데요. 이 주소를 저장하는 변수가 포인터변수입니다. 아래는 예시입니다. int main(void) { int num=3; int * pnt_num=&num; printf("%p \n",pnt_num); printf("%d",*pnt_num); } &는 주소를 가져오는 주소연산자입니다. num의 주소를 가져다가 pnt_num 에 저장하였습니다. 포인터변수를 정의할 때는 *를 붙입니다. 출력할 때 서식문자는 %p입니다. 포인터가 가리키는 주소에 저장된 값을 출력할 때는 * 연산자를 사용합니다. 2022. 3. 30.
[C언어] 문자열의 끝을 나타내는 널문자 문자열에서는 널문자 '\0' 를 문자열의 끝으로 인식합니다. 널문자의 아스키코드가 0이므로 0을 입력해도 결과는 같습니다. 아래는 예시입니다. int main(void) { char str[10]="abcdefgh"; printf("%s\n",str); str[4]=0; printf("%s\n",str); } 다섯번째 자리에 널문자를 넣었더니, 네번째 자리 까지만 문자열로 인식합니다. 2022. 3. 30.
[C언어] 배열의 길이 출력하기 정의된 변수가 몇 바이트를 사용하는지는 sizeof 함수로 알 수 있습니다. sizeof 함수는 배열에도 적용이 가능합니다. 길이가 3인 배열을 정의하고 sizeof 함수를 적용해봅시다. #include int main(void) { int a[3]; printf("%ld",sizeof(a)); } 12가 출력됩니다. 4바이트인 정수형 세개가 하나의 배열을 구성하고 있기 때문입니다. 전체 크기 12를 정수형 하나의 크기 4로 나눠주면 배열의 길이가 됩니다. #include int main(void) { int a[3]; printf("배열의 길이 : %ld",sizeof(a)/sizeof(int)); } 3이 출력됩니다. 2022. 3. 29.
[C언어] 배열 초기화하기 배열을 초기화 하는 방법은 네가지가 있습니다. 1. 배열 선언 후 각 원소 각각 입력 int main(void) { int ar[3]; ar[0]=10; ar[1]=20; ar[2]=30; } 2. 중괄호 이용하여 입력 #include int main(void) { int ar[3]={10,20,30}; } 배열 크기를 비워놓아도 결과는 동일합니다. #include int main(void) { int ar[]={10,20,30}; } 3. 배열의 길이 보다 초기값을 덜 선언 #include int main(void) { int ar[3]={10,20}; } 나머지 값은 0으로 초기화됩니다. 2022. 3. 29.
[C언어] 배열 정의하기 배열을 정의하는 방법은 아래와 같습니다. 자료형을 선언할 때 대괄호 안에 배열의 길이를 넣어주면 됩니다. 아래 배열은 자료형이 정수이고 길이가 5인 배열입니다. int ar[5]; 각 배열 요소는 0 부터 시작됩니다. ar[0] 이 첫번째 요소이고, ar[4] 가 마지막 요소인 다섯번째 요소입니다. 아래는 배열 정의 예시입니다. #include int main(void) { int ar[5]; ar[0]=10; printf("첫번재 요소: %d",ar[0]); } 2022. 3. 29.
[C언어] 재귀함수를 이용한 팩토리얼 함수 만들기 재귀함수를 이용하여 팩토리얼 함수를 만들어보면 아래와 같습니다. #include int factorial(int n) { if(n==0) return 1; else return n * factorial(n-1); } int main(void) { printf("5!=%d",factorial(5)); } 아래는 실행결과입니다. 2022. 3. 29.
[C언어] 재귀함수 재귀함수는 함수 안에 자기 자신을 호출하는 함수를 말합니다. 아래 예시에서 MyRecur 이 재귀함수입니다. #include void MyRecur(void) { printf("Recursive call! \n"); MyRecur(); } int main(void) { MyRecur(); } 위 코드를 실행할 경우 "Recursive call!" 이 무한히 출력됩니다. 2022. 3. 28.
[C언어] 지역변수를 종료시 까지 유지 (static 변수) - 지역변수 앞에 static 을 붙여주면 프로그램 종료 시 까지 사라지지 않는다. 단, 선언된 함수 내에서만 접이 가능하다. - 값을 입력하지 않으면 0으로 초기화된다. void myfunction(void) { static int num=10; } 2022. 3. 28.
[C언어] 전역변수 - 중괄호 밖에 정의된 변수로 프로그램 종료시 까지 존재 - 값을 입력하지 않으면 0으로 초기화됨 - 지역변수와 이름이 겹칠 경우, 지역변수로 접근 아래는 예시입니다. #include int num=10; int main() { printf("전역변수 : %d \n",num); int num=20; printf("지역변수 : %d \n",num); } 2022. 3. 28.
[C언어] 지역변수 - 함수 안에 선언된 변수는 함수가 반환되면 소멸됨 - 반복문이나 조건문 안에 선언도니 지역변수도 해당 문장 탈술 시 소멸됨 - 쉽게 이해하면 중괄호 { } 안에 선언된 변수임. 2022. 3. 28.
[C언어] 반환값도 없고 인자도 없는 함수 C언어에서 함수를 선언할 때 함수 이름 앞에 반환 형식을 쓰고 소괄호 안에는 입력값인 인자를 씁니다. int MyFun(int num) { } 반환값도 업고 인자도 없는 함수를 정의할 수 있습니다. 아래와 같이 void 를 사용하면 됩니다. void MyFun(void) { } 아래는 예시입니다. #include void OnlyPrint(void) { printf("안녕 난 반환값도 없고 인자도 없어"); } int main() { OnlyPrint(); } 실행 결과는 아래와 같습니다. 2022. 3. 28.
[C언어] 반환값이 없는 함수 C언어에서 함수를 선언할 때 함수 이름 앞에 반환 형식을 씁니다. int main( ) { } 반환값이 없는 함수를 정의할 때는 반환형식을 쓰는 자리에 void 라고 써주시면 됩니다. void 는 '텅 빈' 이라는 뜻입니다. 아래는 예시입니다. #include void OnlyPrint(int num) { printf("입력값: %d",num); } int main() { OnlyPrint(3); } 2022. 3. 18.
[C언어] 함수만들기 (두 값의 평균) 두 값의 평균을 계산해주는 mean2 함수를 만들어봅시다. int mean2 (int num1, int num2) { return (num1+num2)/2; } mean2 앞의 int 는 반환형입니다. 함수의 결과를 int로 반환하겠다는 의미입니다. 함수를 한번 사용해봅시다. #include int mean2 (int num1, int num2) { return (num1+num2)/2; } int main() { int mymean; mymean=mean2(5,1); printf("%d",mymean); } 2022. 3. 17.
[C언어] printf 함수가 반환하는 값 printf 함수는 화면에 문자열을 출력하는 기능을 하는데, 그 자체로도 값을 반환합니다. printf 함수가 반환하는 값은 문자열 길이입니다. printf 함수의 반환값을 확인하는 방법은 printf 함수를 변수에 입력하는 것입니다. 아래 코드에서 printf 함수를 num1 과 num1 라는 변수에 입력하였습니다. #include int main() { int num1,num2; num1=printf("aaa\n"); num2=printf("aaaaa\n"); printf("%d\n",num1); printf("%d\n",num2); } 코드 실행 결과는 아래와 같습니다. aaa가 입력된 printf 의 반환값은 4입니다. aaaaa가 입력된 printf 의 반환값은 6입니다. 문자 개수보다 하나가 .. 2022. 3. 17.
[C언어] switch (스위치처럼 선택) switch 문은 중괄호 안의 값과 일치하는 case 를 실행하는 문장입니다. 아래 예시를 봅시다. #include int main() { int num=2; switch(num) { case 1: printf("case1 입니다."); case 2: printf("case2 입니다."); default: printf("디폴트 입니다."); } } 실행 결과는 아래와 같습니다. num 에 2가 입력되어 있으니 case2가 실행되었습니다. 그런데 default 도 실행되었습니다. 디폴트는 항상 실행됩니다. 다른 case 가 실행될 경우 default 는 실행되지 않게 하려면 break 문을 추가하면 됩니다. #include int main() { int num=2; switch(num) { case 1: .. 2022. 3. 16.
[C언어] continue (특정 조건에서 이후 문장 스킵) continue 문은 if문과 함께 사용합니다. 반복문 안에서 if문이 만족할 경우 이후 문장을 스킵하고 다음 반복으로 넘어갑니다. 아래는 1부터 숫자를 출력하다가 5가 될 경우 출력을 스킵하는 예시입니다. #include int main() { int num1=0; while(num1 2022. 3. 16.
[C언어] 31. break (특정 조건에서 반복문 종료) break 문은 if문과 함께 사용합니다. 반복문 안에서 if문이 만족할 경우 반복문을 종료하게 하는 기능을 합니다. 아래는 1부터 숫자를 출력하다가 10 이상이 될 경우 반복문을 종료하는 예시입니다. #include int main() { int num1=1; while(1) { if(num1>=10) { break; } printf("%d\n",num1); num1=num1+1; } } 아래는 실행 결과입니다. 2022. 3. 16.
반응형