본문 바로가기

반응형

C

(149)
[C언어] 문자열: strlen() strlen() 함수는 헤더파일에 정의되어 있다. NULL 전까지 문자열의 길이를 읽어온다. ​ #include #include // 문자열 처리 함수 : strlen(), ... int main(){ char str1[] = "hello"; char str2[] = ""; // ""는 NULL을 의미한다. int len = 0; printf("str1의 길이 : %d\n", strlen(str1)); printf("str1의 크기 : %d\n", sizeof(str1)); // sizeof()는 NULL을 포함한 값의 크기를 구해준다. printf("str2의 길이 : %d\n", strlen(str2)); printf("str2의 크기 : %d\n", sizeof(str2)); printf("'hi,..
[C언어] 문자열과 배열 1. 문자(배)열의 크기는 저장될 문자열의 길이 +1을 해준다. char str[10]; // "abcdefghi" 2. 배열의 크기인 10보다 작은 문자열로 초기화하면, 나머지 공간에는 NULL로 채워진다. char str[10] = "abc"; // abc까지 저장되고 나머지 공간에는 NULL로 채워진다. 3. 선언한 배열의 크기보다 더 큰 문자열을 초기화하려고 시도하면 'compile error'가 발생한다. 즉 문자열을 할당받은 저장 공간의 크기만큼 저장되고, 나머지 문자열 자리에는 쓰레기 값이 출력된다. char str[10] = "abcdefghijklmn"; // compile error 4. 배열을 초기화했을 경우, 배열의 크기는 따로 입력하지 않아도 된다. char str[] = "abc..
[C언어] 실습: 문자열 처리하기(동적 할당) 문자열 처리하기(동적 할당) step1. 문자열을 입력받기 위해서 충분한 크기의 문자 배열을 선언한다. step2. 문자열을 입력받는다. step3. 입력받은 문자열의 크기를 계산한 후, 그 공간만큼 동적할당받는다. step4. 할당받은 공간에 문자열을 대입한다. #include #include // malloc() #include // strlen(), strcpy(), strcat(), strcmp().. int main(){ // step1. 문자열을 입력받기 위해서 충분한 크기의 문자배열을 선언한다. char tmp[100]; // 충분한 공간을 확보하기 위한 임시문자배열을 선언한다. char *str[3]; // 동적 할당을 하기 위한 포인터 배열 변수를 선언한다. // step2. 문자열을 입..
[C언어] 동적 메모리 할당 (malloc, calloc) 동적 메모리는 메모리의 낭비를 방지하기 위해 할당하여 사용한다. - c: malloc(), calloc(), free() - c++: new, delete - java: new malloc() 함수는 메모리 공간을 할당하면 그 공간에 쓰레기 값이 들어가 있다. 또한 메모리를 할당할 수 없는 경우 'NULL'을 반환한다. 반면, calloc() 함수는 메모리 공간을 할당하면 그 공간이 0으로 초기화된다. #include #include // 동적할당 함수를 내장하고 있다. // malloc(), calloc() int main(){ int *pi; double *pd; pi = (int*)malloc(3*sizeof(int)); // int형 타입 3개 담을 공간을 할당한다. pd = (double*)ca..
[C언어] 이중 포인터 이중 포인터 - 포인터의 포인터 - 더블 포인터 - 싱글 포인터의 주솟값을 저장하는 용도의 포인터(단일 pointer를 가리키는 용도) // 이중 포인터 'pa'에 포인터 'p'의 주솟값 저장 int **pa = &p #include int main(){ int x = 100; int *p = &x; // pointer p에 변수 x의 주소값을 저장한다. int **pi = &p; // pointer pi에 포인터 p의 주소값을 저장한다. *p = 200; printf("x = %d, *p = %d, **pi = %d\n", x, *p, **pi); **pi = 300; // *pi == p, *(*pi) == *p == x printf("x = %d, *p = %d, **pi = %d\n", x, *p..
[C언어] const const int *p; // 읽기 전용 포인터(주소 변경 가능, 값 변경 불가능) int* const p; // 특정 변수 전용 포인터(주소 변경 불가능, 값 변경 가능) const int* const p; #include int main(){ int x = 10, y = 20; const int* p1 = &x; // pointer p는 '읽기 전용 포인터'이다. 포인터를 이용해서 값을 변경할 수 없다. // 포인터가 가리키는 주소는 변경할 수 있지만, 그 안에 저장된 값은 바꿀 수 없다. // == (int const *p1) printf("*p1 = %d\n", *p1); x = 30; // 직접 변경이 가능하다. printf("*p1 = %d\n", *p1); // *p1 = 20; // (오류..
[C언어] 이차원 배열 이차원 배열 room에는 아래와 같이 저장되어 있다. room[2][0] = 'a' room[2][1] = 'b' room[2][2] = 'c' room[2][3] = '\n' 그리고 행을 출력할 때는 아래와 같이 사용할 수 있다. room[2] = "abc" 또는 &room[2] = "abc"
[C언어] 포인터 배열 #include int main(){ int arr1[4] = {1, 2, 3, 4}; int arr2[4] = {5, 6, 7, 8}; int arr3[4] = {9, 10, 11, 12}; int* ptr_arr[3] = {arr1, arr2, arr3}; // 포인터 변수 ptr_arr[]에 arr1, arr2, arr3을 저장한다. for(int i = 0; i < 3; i++){ for(int j = 0; j < 4; j++) printf("%3d", ptr_arr[i][j]); printf("\n"); } return 0; }

반응형