Programming
-
C언어 포인터 대상의 const 선언Programming/C 2016. 5. 2. 20:44
포인터 대상의 const 선언 변수를 상수화하는 const 선언은 포인터 변수를 대상으로도 선언이 가능하다. 포인터 변수가 참조하는 대상의 변경을 허용하지 않는 const 선언 int main(void) { int num = 20; const int * ptr = # *ptr = 30; // 컴파일 에러 num = 40; // 컴파일 성공 ... } 맨 앞에 const가 선언이 되면 포인터 변수 ptr을 이용해 가리키는 변수에 저장된 값을 변경하는 것을 허용하지 않지만 변수 num 자체가 상수화되는 것은 아니다. 즉 변경하는 방법에 제한을 두는 것이지 무언가를 상수로 만드는 선언은 아닌 것이다. 포인터 변수의 상수화 다음과 같이 선언하면 포인터 변수 ptr은 상수가 된다. 그 뜻은 한번 주소값이 ..
-
C언어 Call-by-value vs. Call-by-referenceProgramming/C 2016. 5. 2. 20:42
Call-by-value vs. Call-by-reference 함수의 호출 방식을 의미 Call-by-value 단순히 값을 전달하는 형태의 함수호출 #include void Swap(int n1, int n2) { int temp = n1; n1 = n2; n2 = temp; printf("n1 n2: %d %d \n", n1, n2); } int main(void) { int num1 = 10; int num2 = 20; printf("num1 num2: %d %d \n", num1, num2); Swap(num1, num2); printf("num1 num2: %d %d \n", num1, num2); return 0; } num1 num2: 10 20 n1 n2: 20 10 num1 num2: ..
-
C언어 포인터 배열Programming/C 2016. 5. 2. 20:27
포인터 배열 포인터 변수로 이뤄진, 주소 값의 저장이 가능한 배열을 포인터 배열이라고 한다. int * arr1[20]; double * arr2[30]; 포인터 배열의 선언과 활용 #include int main(void) { int num1 = 10, num2 = 20, num3 = 30; int * arr[3] = {&num1, &num2, &num3}; printf("%d \n", *arr[0]); printf("%d \n", *arr[1]); printf("%d \n", *arr[2]); return 0; } 10 20 30 문자열을 저장하는 포인터 배열 문자열의 주소 값을 저장하는 'char형 포인터 배열' #include int main(void) { char * strArr[3] = {"S..
-
C언어 변수Programming/C 2016. 5. 2. 20:22
변수 지역변수(Local Variable) 함수 내에만 존재 및 접근이 가능하다. '지역'이란 중괄호에 의해 형성되는 영역 지역변수는 '스택'이라는 메모리 영역에 할당된다. 지역변수는 접시에 쌓듯이 할당된다. 메모리 공간에 해당 선언문이 실행될 때 할당되었다가 선언문이 존재하는 함수가 반환을하면(종료) 메모리 공간에서 소멸된다. 매개변수: 지역변수의 일종 선언된 함수 내에서만 접근이 가능 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸이 된다. 전역변수 어디서든 접근이 가능한 변수 지역변수와 달리 중괄호 내에서 선언되지 않는다. 기본 0으로 초기화된다. 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재한다. - 전역변수와 동일한 이름의 지역변수가 선언되면 해당 지역 내에서는 전역변..
-
c언어 포인터Programming/C 2016. 5. 2. 20:20
포인터 포인터를 이용하면 메모리에 직접 접근이 가능하다. C언어가 Low 레벨 언어의 특성을 지닌다고 이야기하게 만든 장본인 C언어에서는 시작번지만을 가지고 위치를 표현한다. 왜냐면 예를 들어 int형 변수는 4바이트이므로 변수의 끝은 쉽게 계산이 가능하기 때문이다. 예) int형 변수 num은 0x12ff76번지에 할당되어 있습니다. 위의 0x12ff76역시 정수이므로 저장이 가능한 값이다. 이 값을 저장하기 위해 마련된 변수가 바로 포인터 변수 이다. 포인터 변수란 메모리의 주소 값을 저장하기 위한 변수이다. '포인터'는 '변수 형태의 포인터'와 '상수 형태의 포인터'를 어우르는 표현인데 대부분이 포인터 변수와 관련이 있어 포인터라 하면 우선 '포인터 변수'를 연상하면 된다. 포인터 변수와 & 연산자..
-
1차원 배열Programming/C 2016. 4. 30. 14:45
배열의 이해와 배열의 선언 및 초기화 1차원 배열의 선언에 필요한 것 세 가지 배열이름 자료형 길이정보 int oneDimArr[4] int: 배열을 이루는 요소(변수)의 자료형 oneDimArr: 배열의 이름 [4]: 배열의 길이 반복문 기반의 순차적 접근이 가능하다. scanf() 함수는 공백이 입력의 끝을 알린다. #include int main(void) { char str[50]; int idx = 0; printf("문자열 입력: "); scanf_s("%s", str, 50); printf("입력 받은 문자열: %s \n", str); printf("문자 단위 출력: "); while (str[idx] != '\0') { printf("%c", str[idx]); idx++; } printf..
-
도전 프로그래밍1Programming/C 2016. 4. 30. 14:39
도전1 10진수 정수를 입력받아 16진수로 출력 #include int main(void) { int num; printf("10진수 정수 입력: "); scanf_s("%d", &num, 1); printf("10진수 %d는 16진수로 %x이다 \n", num, num); return 0; } 도전2 사용자로부터 두 개의 정수를 입력 받아 구구단을 출력. 사용자가 3과 5를 입력하면 3, 4, 5단이 출력, 2, 4를 입력하면 2, 3, 4단이 출력. 사용자는 입력 순서에 자유로워야 한다. #include int gugu(int num1, int num2); int main(void) { int num1, num2; printf("두 개의 정수를 입력하시오. "); scanf_s("%d %d", &nu..
-
함수Programming/C 2016. 4. 30. 14:32
함수 int main(void) { // 함수의 몸체 } int: 반환형태 main: 함수이름 void: 입력형태 함수는 호출하기 전에 미리 선언해야 한다.(정의는 뒤에서 해도 된다.) 매개변수의 갯수 및 자료형 정보만 포함하면 된다. (매개변수 이름 생략 가능) return이 지니는 의미 키워드 return은 값을 반환하면서 함수를 빠져나갈 때 사용된다. 반환형이 void로 선언된 함수에서도 return문을 삽입할 수 있다. 예) 반환없이 함수를 빠져나간다. void NoReturnType(int num) { if (num < 0) return; .... } 재귀함수 같은 함수 내에서 자기 자신을 다시 호출하는 함수 void Recursive(void) { printf("Recursive call! \..