programming language/C 언어 (41) 썸네일형 리스트형 배열과 포인터의 연관 및 다양한 문자열 함수 문자열은 c언어에서 다양한 문자 표현을 나타내기 위해 사용한다. 내부적으로 문자열은 char자료 타입의 배열로 이루어져 있으며 이것은 포인터와 같다고 할 수 있다 즉, 배열은 내부적으로 포인터와 동일한 구조이다. char array[10];이 선언된 후 10개 바이트만큼 우리 메모리에 자리 잡았다고 생각하면 된다. #include int main(void) { char input [1001]; gets(input); int count = 0; while (input [count]!= '\0') { count++; } printf("입력한 문자열의 길이는% d입니다", count); //문자열의 길이 맞는 표현 ㅇ printf("입력한 문자열은 % s입니다.", input); return 0; } 예를 들.. c언어 포인터 이해. //두 변수의 값을 서로 변환하는 포인터 함수 #include void swap(int* x, int* y) { int temp; temp = *x; *x = *y; *y = temp; } int main(void) { int x = 1; int y = 2; swap(&x, &y); printf("x = %d\ny = % d\n", x, y); return 0; } 출력은 x와 y값이 바뀐채로 출력이 된다. swap(&x, &y);를 통해 void swap(int* x, int* y) 함수가 호출이 되었고 swap 함수를 통해 x가 가리키는 값과 y가 가리키는 값이 바뀌게 되면서 x y의 값이 서로 바뀌었다. 포인터 추가 개념이해 int x = 70; int *y = &x; (x주소를 가리키도록 선언)가.. 배열기반의 문자열 표현 문제 11-2(영단어 길이계산) -윤성우 열혈 c 프로그래밍- 문제 1 영단어를 입력받아 그 영단어의 길이를 계산하여 출력하는 프로그램을 작성하는 문제이다. 널문자가 문자열의 끝에 있으므로 이와 같이 문장을 구성할 수 있다. 위 37~39행의 과정은 영단어의 길이를 출력하는 과정이지, 문자열 배열의 길이를 출력하는 과정이 아니다. 위 문제를 풀던 중 반복문에 대한 개념이 헷갈려 반복문에 대한 고민을 해보았다. 위는 for반복문인데, is = 5가 될 때 for문을 탈출한다 왜냐하면 (is < 5)라는 조건식이 있기 때문이다. 그러면 9행에서 출력되는 is의 값은 4 일까? 그것은 출력 결과를 통해 아니라는 답을 얻을 수 있다. is = 5인 상태에서 for문을 나온 것이므로 위 9행의 출력 결과는 5 인 것이다. 문제 2 프로그램 사용.. 배열을 이용한 문자열 변수의 표현 char str [14] = "Good Morning!"; char str[ ] = "Good Morning!"; 위 문장들에서 볼 수 있듯이 이문장의 배열의 길이는 14이다. 그런데 공백문자와 !문자를 포함하여 13 문자인데 왜 길이가 14일까? 그것은 문자열 끝의 널문자('\0') 때문이다. 즉 문자열의 저장을 목적으로, char형 배열을 선언할 경우 널문자가 저장될 공간까지 생각해서 배열의 길이를 결정해야 한다. 5행에서 4행에서 선언된 배열의 크기를 출력하고 있는데, 출력 값은 14이다. 이는 널문자를 고려해서 배열의 길이가 결정된 결과이다. char형의 크기가 1바이트 이기 때문에 14라는 수가 나올 수 있었다. 그리고 위에서 볼 수있듯이 널문자의 아스키 코드값은 0이고 이를 문자의 형태로 출력.. c언어 포인터란? 우선 포인터 변수란? 메모리의 주소 값을 저장하기 위한 변수이다! int main(void) { int num = 7; // 정수 7이 저장된 변수 num선언. int * pnum; // 포인터 변수 pnum의 선언 pnum = # // num의 주소값을 포인터 변수 pnum에 저장 } ○ int * pnum; 의 문장이 포인터 변수의 선언이다. 1. pnum :포인터 변수의 이름 2. int * : int형 변수의 주소 값을 저장하는 포인터 변수의 선언. ○ pnum = # 위 문장에서 &연산자는 오른쪽에 등장하는 피 연산자의 주소값을 반환하는 연산자이다. 따라서 &연산의 결과로 변수 num의 주소 값이 반환되며, 이를 포인터 변수 pnum에 저장하게 된다. 포인터 형(type)이란? 우.. 열혈 c프로그래밍 11-2번(배열의 크기 와 길이) char형 1차원 배열을 선언과 동시에 다음 문장 내용으로 초기화하고 초기화 이후에는 저장된 내용을 출력하는 예제다. Good time 11-2번을 처음 푼 오답풀이이다. 서식 문자 % c가 char형과 함께 쓰이며, 문자의 형태로 데이터를 출력또는 입력하라 라는 의미를 가진다. 기본 자료형 변수들이 선언과 동시에 초기화하는 것처럼! 배열도 가능하다! 배열의 초기화 방법은 총 세가지이다. 1. int arr [3] = {1,2,3}; //순차적으로 1 2 3을 초기화한다. cf) 중괄호로 묶인 부분을 초기화 리스트라고 한다. 2. int arr [ ] = {1,2,3,4,5}; //컴파일러에 의해서 자동으로 5가 삽입이 된다. 이문장에서 볼 수 있듯이 초기화를 목적으로 초기화 리스트가 선언되면 배열의 길.. 열혈 c프로그래밍 11-1번(최대, 최소) 길이가 5인 int형 배열을 선언해서 프로그램 사용자로부터 5개의 정수를 입력받고 입력이 끝나면 적혀있는 내용을 출력하는 예제이다. 처음 11-1번을 풀때 접근한 방법이다. 최대 최소를 어떻게 나누어 구해야 할지 막막하였다. 결국 풀이를 보았고 풀이를 보아도 처음에 이해가 가지 않는 부분이 몇몇 있었다. 243행에서 왜? max = min =sum =arr [0] 일까?라고 생각을 하였는데, arr [0]은 배열 arr의 첫 번째 요소의 값으로 첫번째값이 곧 max이고 min이고 sum(합)이라는 사실을 깨달았다. 그리고, if절에서 조건식에 max < arr[n]. 이의 if블록 안에 max = arr [n]의 문장이 이해가 가지 않았다. 처음에 max의 값이 어떤값인지 알고 조건식에 위치해 있으며 m.. c언어 재귀함수의 이해 우선 팩토리얼 이란? 4! = 4 x 3 x 2 x 1 과 같다. 즉 4! = 4 x (4-1)! 이고 이는 4 x 3! 과 같다. 그러면 1!은? 1이다. 1!을 위와 같은 식으로 표현해 보면 1 x (1 - 1)! 이고 이는 1 x 0! 과 같다. 즉 0! = 1이 된다. 128행을 보면 factorial(1)이 있는데 116행의 factorial 함수에 1의 인자를 받을 int n이 있다. 이 함수에 1이 들어가면 우선, 1 * factorial( 1 - 1)이 시행이 된다. factorial(0)이 다시 호출되어 factorial(0)을 시행한다. 그런데 n ==0이면 1을 반환하므로 1이 앞으로 반환된다. 즉 1 * 1 = 1 이되어 128 행의 출력값은 1이된다. 131행에서는 factoria.. 이전 1 2 3 4 5 6 다음