목록C (65)
개인노트
문제 1) 길이가 10인 배열에 10개의 정수를 입력 받은 뒤 홀수와 짝수를 구분 할 수 있는 함수를 두개 만들어서 호출 한 뒤 출력해보자. 도전 2-1.c #include void odd(int *, int);void even(int *, int); int main(void) {int arr[10];int i, len = sizeof(arr) / sizeof(int); printf("10개의 정수 입력\n"); for (i = 0; i < len; i++) {scanf_s("%d", &arr[i]);} odd(arr, len);even(arr, len); getchar();getchar();} void odd(int * ptr, int len) {int i; for (i = 0; i < len; i++..
* C언어에서 const란 변수를 상수화(값을 고정) 시키는 목적이다. ** 또한 const를 선언하게 되면 안전성이 향상된다. * 예시1 [ 예시 1번 해석 ] 그림 1의 const int * ptr = # 코드와 그림 2의 int const * ptr = # 코드는 동일한 뜻을 가진 코드이며, 포인터 변수 ptr에 저장된 변수의 값을 상수로 선언한 것이다.다시 설명하자면 포인터 변수 ptr에 저장된 변수 num의 메모리 값을 참조하여 num에 저장된 값을 바꿀 수 없다는 뜻이다.즉, num에 저장된 값은 num = 40; 과 같이 선언해서 바꿀 수는 있지만 ptr에 선언된 메모리 주소 값을 통해서는 바꿀 수 없다. 예시2 [ 예시 2번 해석..
문제 1) 변수 num에 저장된 값의 제곱을 계산하는 함수를 정의하고 이를 호출하는 main 함수를 작성해보자.(함수 1. Call-By-Value 기반의 SquareByValue 함수 함수 2. Call-By-Reference 기반의 SquareByReference 함수) Q) 14-1_1.c #include int SquareByValue(int);void SquareByReference(int*, int); int main(void) { int num; printf("양의 정수를 입력하시오 : ");scanf_s("%d", &num);SquareByValue(num);printf("num의 값 1 : %d \n", num);SquareByReference(&num,num);printf("num의 값..
보통 함수에 인자를 전달한다고 하면 int main(void){int num=1, tistory=2;ifunc(num, tistory); } 이런 형식으로 해당 함수의 인자전달 부분에 변수명을 넣어준다.하지만 배열은 변수 명 대신 변수의 주소 값을 넣어준다. #include void showarr(int*, int);void addarr(int*, int, int); int main(void) {int arr[] = { 1,2,3,4,5 };addarr(arr, sizeof(arr) / sizeof(int), 1);showarr(arr, sizeof(arr) / sizeof(int)); addarr(arr, sizeof(arr) / sizeof(int), 2);showarr(arr, sizeof(arr)..
* 포인터 배열이란 ? 포인터 변수로 이루어져 주소 값의 저장이 가능한 배열을 '포인터 배열' 이라고 한다. Source.c #include int main(void) {int num1 = 10, num2 = 20, num3 = 30;int *arr[3] = { &num1,&num2,&num3 };int i; for (i = 0; i
char str1[] = "billnairk";- 변수 형태의 문자열 char *str2 = "billnairk";- 상수 형태의 문자열 #include int main(void) {char str1[] = "MS tistory"; // 변수 형태의 문자열char * str2 = "KMS billnairk"; // 상수 형태의 문자열 printf("%s, %s \n", str1, str2); str2 = "babo";// str2[0] = "A"; 불가능printf("%s, %s \n", str1, str2); getchar();} 다음 문장이 처리되는 과정 [ char *str2 = "billnairk"; ]1. 문자열이 메모리 공간에 저장된다.2. 메모리의 주소 값이 반환된다.즉, 문자열이 0x123..
문제 1.) 길이가 5인 int형 배열을 1,2,3,4,5로 선언 및 초기화 후 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로 배열 요소에 접근 하면서 모든 배열 요소의 값을 2씩 증가 시킨 후 출력하여라. Q) 13-1_1.c #include int main(void) {int arr[] = { 1,2,3,4,5 };int *ptr = arr;int i; for (i = 0; i < 5; i++) {*ptr += 2;ptr++;} for (i = 0; i < 5; i++) {printf("%d 번째 배열의 값 : %d \n", i, arr[i]);}getchar();} 문제 2.) 문제 1과 달리 포인터 변수 ptr에 저장된 값을 변경시키지 않고 ptr을 대상으로 덧셈 연산을 하여..
배열의 이름은 포인터(메모리 주소값을 나타냄)이며 포인터 변수와는 달리 값을 바꿀 수 없는 상수형태의 포인터이다. Source.c #include int main(void) {int arr[] = { 1,2,3 };printf("배열의 이름 : %p \n", arr);printf("첫번째 요소 : %p \n", &arr[0]);printf("두번째 요소 : %p \n", &arr[1]);printf("세번째 요소 : %p \n", &arr[2]); getchar();} Source.c 1. 배열 이름의 주소 값과 배열의 첫번째 주소 값이 동일한 것을 알 수 있다. 2. 두번째 요소와 세번째 요소의 값의 차이가 4인것을 보아 'int형 배열 요소간 주소 값의 차는 4byte이다.' 3. 변수 앞에 기호 &..
문제 1. 아래의 예제 실행 시 포인터 변수와 변수의 관계를 그림으로 그린 후 출력의 결과를 말하여라. Q) 12-1_1.cint main(void) {int num = 10;int * ptr1 = #int * ptr2 = ptr1; (*ptr1)++;(*ptr2)++; printf("%d \n", num);getchar(); } 출력 결과 : num의 값은 2번 상승하여 12이다. 문제 2. int형 변수 num1, num2를 10과 20으로 선언 및 초기화 → int형 포인터 변수 ptr1, ptr2 선언 후 num1, num2를 가리킴 → 포인터 변수를 이용하여 num1은 10증가 num2는 10 감소 → ptr1과 ptr2이 가리키는 대상을 바꾸고 출력 하여라. Q) 12-1_2.c #in..
포인터란 ? 변수의 메모리 주소 값을 저장하기 위해 존재하며 포인터 변수라고도 한다. 1바이트의 메모리 공간을 단위로 하나의 주소 값이 할당되며, 주소 값도 1씩 증가한다. Tip.int num, * pnum; // int형 변수 num과 inut형 포인터 변수 pnum 선언; int main(void) { int num = 5; int * pnum; // 포인터 변수 pnum 선언 pnum = # // num의 주소값을 포인터 변수 pnum에 선언 } 32bit 시스템 에서는 주소 값을 32bit로 표현하기 때문에 포인터 변수의 크기가 4byte이다. 64bit 시스템 에서는 주소 값을 64bit로 표현하기 때문에 포인터 변수의 크기가 8byte이다. 포인트 형(Type) int * char *..