목록C/문법 (40)
개인노트
다차원 배열이란 ? 다차원 배열이란 2차원 이상의 배열을 말하며 4차원, 5차월 배열도 다차원 배열에 속한다.1차원 배열은 직선, 2차원 배열은 평면, 3차원 배열은 직육면체 구조의 배열이다. [ 다차원 배열 ] int arr[5]; // 1차원 배열, 0~5개의 방int arr[4][2]; // 2차원 배열, 4개의 행과 2개의 열int arr[3][3][3]; // 3차원 배열! [ 3차원 배열 ] 3차원 배열은 2차원 배열을 완벽하게 이해하였다면 쉽게 느껴질 것이다. double arr[4][5][6]; // 높이4, 세로5, 가로6 [ 2차원 배열 ] 2차원 배열은 다차원 배열을 대표 하는 배열이고 다차원 배열 하면 보통 2차우 배열을 자주 사용한다.1차원 배열과 다른 점은 배열에 [4]라고 선언..
* C언어에서 const란 변수를 상수화(값을 고정) 시키는 목적이다. ** 또한 const를 선언하게 되면 안전성이 향상된다. * 예시1 [ 예시 1번 해석 ] 그림 1의 const int * ptr = # 코드와 그림 2의 int const * ptr = # 코드는 동일한 뜻을 가진 코드이며, 포인터 변수 ptr에 저장된 변수의 값을 상수로 선언한 것이다.다시 설명하자면 포인터 변수 ptr에 저장된 변수 num의 메모리 값을 참조하여 num에 저장된 값을 바꿀 수 없다는 뜻이다.즉, num에 저장된 값은 num = 40; 과 같이 선언해서 바꿀 수는 있지만 ptr에 선언된 메모리 주소 값을 통해서는 바꿀 수 없다. 예시2 [ 예시 2번 해석..
보통 함수에 인자를 전달한다고 하면 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..
배열의 이름은 포인터(메모리 주소값을 나타냄)이며 포인터 변수와는 달리 값을 바꿀 수 없는 상수형태의 포인터이다. 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바이트의 메모리 공간을 단위로 하나의 주소 값이 할당되며, 주소 값도 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 *..
[ scanf_s 함수를 이용한 배열의 문자열 입력 ] scanf_s 함수에 배열과 문자열을 사용할 때는 몇가지 다른점이 있다. 1. 변수를 입력할 때와 달리 배열의 문자를 입력할 때에는 배열 이름 앞에 &기호를 붙이지 않는다.ex) scanf_s("%d", &num); → scanf_s("%s", str); 2. 문자열을 입력할 때에는 입력받을 인수의 크기를 지정해 주어야 한다.ex) scanf_s("%s", str); [X], scanf_s("%s", str, sizeof(str)); [O] * scanf_s() 함수의 's' 는 security(보안)을 의미하며, 버퍼오버런, 버퍼오버플로우 등 해킹으로부터 보호하기 위해, 보안 기능이 추가된 함수이며,scanf_s("%s", buf, sizeof(b..
[ 배열의 문자열 저장과 널(NULL) 문자 ] C언어는 문자와 문자열의 구분을 위하여 널값을 사용하는데 문자의 끝에 널값이 있으면 문자열이 된다. 배열.c #include int main(void){char str[] = "Tistory BillnairK?"; // 배열 str 선언 및 초기화printf("배열 str의 크기 : %d \n", sizeof(str));printf("널 문자의 문자형 : %c \n", str[13]);printf("널 문자의 정수형 : %d \n", str[13]);str[17] = '!'; // 12번째 배열의 문자 변경printf("문자열 출력 : %s \n", str);char null = '\0', space = ' '; // null = 널 문자, space = ..
1차원 배열 [ 배열의 선언 ] int tistory [5];→ 자료형이 int이고 이름이 tistory인 배열을 5개 선언→ 배열은 0부터 시작한다. 배열이 5라면 0~4 [ 배열을 선언하면서 초기화 ] 1. int tistory[5]={1,2,3,4,5};→ 5개의 배열을 선언하고 0 부터 4번째 배열에 1,2,3,4,5를 하나씩 넣는다. 2. int tistory[]={1,2,3,4,5};→ 배열의 길이를 선언하지 않고 값을 초기화 해도 초기화 한 값들의 갯수를 보고 길이정보는 채워진다.즉, 1번과 2번은 같은 결과가 나온다. 3. int tistory[5]={1,2};→ 이같은 경우는 배열은 총5개이지만 2개의 값만 초기화가 되었다. 이렇게 된다면 앞의 첫번째 배열과 두번째 배열에 1과 2라는 값..