본문 바로가기
반응형

C언어/배열17

[C언어] 배열 명과 포인터의 차이 아래와 같이 배열을 정의합시다. int ar[3]={1,2,3}; 배열 명 ar에는 배열의 첫번째 요소 ar[1] 의 주소가 입력됩니다. 주소가 입력되었으니 일종의 포인터 역할을 하는 것입니다. 아래와 같이 배열의 이름을 포인터변수에 입력할 수도 있습니다. int *p=ar; p와 ar에는 ar[1] 의 주소라는 같은 값이 입력되어 있습니다. 이때 둘의 차이는 무엇일까요? 1. ar에 sizeof 를 적용하면 배열의 크기가 출력되지만, p는 포인터 하나의 크기가 출력됨. 2. ar에 입력된 값은 변경이 불가능함. p에 입력된 값은 변경 가능. 2022. 7. 20.
[C언어] 배열에 문자를 하나씩 입력하는 경우 (널문자의 중요성) 배열을 하나 정의하고 문자를 하나씩 입력해봅시다. #include int main() { char str[10]; str[0]='A'; str[1]='B'; printf("%s",str); return 0; } 쓰레기 값이 출력됩니다. 널 문자를 이용하여 AB만 출력되도록 해봅시다. 문자열은 널 문자 까지만 출력됩니다. 널 문자는 \0 입니다. #include int main() { char str[10]; str[0]='A'; str[1]='B'; str[2]='\0'; printf("%s",str); return 0; } 2022. 7. 15.
[C언어] 2차원 배열의 이름 증감연산 (포인터) 2차원 배열 두개를 정의했습니다. ar1 은 3행 2열의 배열이고, ar2 는 2행 3열의 배열입니다. 1씩 더해서 주소를 출력했습니다. 배열의 이름에 주소가 저장됩니다. 배열은 포인터입니다. 첫번째 원소를 가리키는 포인터입니다. #include int main () { int ar1[3][2]; int ar2[2][3]; printf("%p \n",ar1); printf("%p \n \n",ar1+1); printf("%p \n",ar2); printf("%p",ar2+1); } 결과는 아래와 같습니다. 3행2열의 배열은 1을 더하면 8이 증가합니다. 아래와 같은 이유 때문입니다. 첫번째 원소에서 세번째 원소가 되므로 4+4 만큼 주소가 shift 되는 것입니다. 2행3열인 배열은 1을 더하면 c만큼 .. 2022. 7. 7.
[C언어] 포인터 배열의 타입 배열을 하나 정의합시다. int arr[5]; arr에는 무엇이 저장될까요. arr에는 첫번째 원소의 주소가 입력됩니다. 따라서 arr의 타입은 포인터형입니다. 이번에는 포인터배열을 하나 정의합시다. 포인터배열의 원소는 변수들의 주소입니다. int *arr2[5] 배열의 이름은 포인터인데, 포인터배열인 arr2의 타입은 무엇일까요? arr2도 첫번째 원소의 주소가 입력될 것입니다. 첫번째 원소는 어떤 변수의 주소일 것입니다. arr2 에는 주소의 주소가 입력된느 것입니다. arr2는 포인터의 포인터, 즉 더블포인터입니다. 포인터배열의 타입은 더블포인터입니다. 2022. 7. 7.
[C언어] 다차원 배열 정의하는 방법 1차원 배열의 정의 int myarr[3]={1,2,3}; 2차원 배열의 정의 int myarr[2][3]={ {1,2,3},{4,5,6} }; 또는 int myarr[2][3]={ 1,2,3,4,5,6 }; 2022. 7. 6.
[C언어] 포인터 배열은 여러 주소를 배열로 저장한다 포인터 배열은 포인터와 배열이 합쳐진 개념입니다. 배열이 여러 변수를 한번에 저장하는데, 여기 포인터 개념이 합쳐져서 여러 주소를 한번에 저장하는 기능을 합니다. 변수 두개를 선언하고, 포인터 배열로 주소를 저장하면 아래와 같습니다. int var1=1; int var2=2; int * parr[2]={&var1,&var2}; 2022. 7. 4.
[C언어] 배열의 이름은 포인터다 배열의 이름은 특정 값이 아니라 배열의 주소를 가리킵니다. 예를들어 아래와 같은 배열을 정의하고 배열 이름을 출력하면 주소가 출력됩니다. int myarr[3]={1,2,3}; printf("%p",myarr); 출력된 주소는 첫번째 요소의 주소입니다. %p 는 포인터의 주소를 출력할 때 사용하는 서식문자입니다. 일반적인 포인터와 다른 점은 변경이 불가능하다는 것입니다. 2022. 6. 29.
C언어 배열을 선언과 동시에 초기화하는 방법 중괄호를 이용합니다. #include int main() { int myarr[3]={1,10,100}; printf("myarr[0] 은 %d 입니다. \n",myarr[0]); printf("myarr[1] 은 %d 입니다. \n",myarr[1]); printf("myarr[2] 은 %d 입니다. \n",myarr[2]); return 0; } 2022. 6. 22.
C언어 배열이란 무엇이며, 왜 존재하며, 어떻게 정의하나 배열이란 무엇인가? 배열은 둘 이상의 변수를 모아놓은 것을 말한다. 왜 존재하나? 변수 여러개를 편하게 정의하기 위해 존재한다. 또는 문자열 정의에 사용된다. 어떻게 정의하나? 아래와 같은 형식으로 정의한다. 자료형 배열이름 [길이]; 배열을 정의하고 각 원소 값을 지정하는 예시는 아래와 같다. #include int main() { int myarr[3]; myarr[0]=1; myarr[1]=10; myarr[2]=100; printf("myarr[0] 은 %d 입니다. \n",myarr[0]); printf("myarr[1] 은 %d 입니다. \n",myarr[1]); printf("myarr[2] 은 %d 입니다. \n",myarr[2]); return 0; } 2022. 6. 22.
[C언어] 다차원 배열 (2차원 배열) 2차원 이상의 배열을 만들 수 있습니다. 2차원 배열은 아래와 같이 선언합니다. int arr2[3][2] 3행 2열의 배열을 뜻합니다. 선언과 동시에 초기화하는 방법은 아래와 같습니다. #include int main(void) { int arr2[3][2]={ {1,2},{3,4},{5,6} }; } 아래 배열을 만든 것입니다. 1 2 3 4 5 6 일부를 비워두면 0으로 초기화됩니다. 2022. 3. 31.
[C언어] 함수의 인자로 배열을 입력받을 때 다른 형태의 선언 함수의 인자로 배열을 입력받을 때 아래와 같이 한다고 배웠습니다. void PrintArr(int *p_ar) *연산자로 포인터변수를 선언해서 배열의 주소를 가져오는 것인데요. 아래와 같이 선언해도 됩니다. void PrintArr(int p_ar[ ] ) p_ar[ ] 을 다른 경우에 사용할 수는 없습니다. 함수의 인자로 받는 경우만 가능합니다. 2022. 3. 31.
[C언어] 포인터 배열 포인터를 배열 형태로 만드는 것도 가능하다. 배열의 각 요소는 주소값을 갖는다. #include int main(void) { int num1=1; int num2=2; int num3=3; int *ar[3]={&num1,&num2,&num3}; printf("%p\n",ar[0]); printf("%d\n",*ar[0]); printf("%p\n",ar[1]); printf("%d\n",*ar[1]); } 2022. 3. 31.
[C언어] 포인터를 배열 이름처럼 사용 배열 이름은 포인터입니다. 포인터변수를 하나 만들고 배열 이름을 입력하면 해당 포인터변수를 배열 이름처럼 사용할 수 있습니다. int main(void) { int ar[2]={10,20}; int *p_ar=ar; printf("%p\n",p_ar); printf("%d",p_ar[0]); } 배열 ar 을 p_ar 에 입력하면 배열 ar의 주소가 포인터변수 p_ar에 할당됩니다. 배열 ar 자체가 주소였는데, p_ar 도 같은 주소이므로 p_ar 을 ar처럼 사용할 수 있게 된 것입니다. 2022. 3. 30.
[C언어] 배열의 이름은 포인터 배열의 이름은 포인터입니다. 배열의 이름을 출력하면 주소가 출력됩니다. 아래와 같습니다. 주소가 가리키는 값에 접근하는 *연산자도 사용가능합니다. #include int main(void) { int ar[2]={10,20}; printf("%p\n",ar); printf("%p\n",&ar[0]); printf("%p\n",&ar[1]); printf("%d\n",*ar); printf("%d\n",*&ar[0]); printf("%d\n",*&ar[1]); } 2022. 3. 30.
[C언어] 배열의 길이 출력하기 정의된 변수가 몇 바이트를 사용하는지는 sizeof 함수로 알 수 있습니다. sizeof 함수는 배열에도 적용이 가능합니다. 길이가 3인 배열을 정의하고 sizeof 함수를 적용해봅시다. #include int main(void) { int a[3]; printf("%ld",sizeof(a)); } 12가 출력됩니다. 4바이트인 정수형 세개가 하나의 배열을 구성하고 있기 때문입니다. 전체 크기 12를 정수형 하나의 크기 4로 나눠주면 배열의 길이가 됩니다. #include int main(void) { int a[3]; printf("배열의 길이 : %ld",sizeof(a)/sizeof(int)); } 3이 출력됩니다. 2022. 3. 29.
[C언어] 배열 초기화하기 배열을 초기화 하는 방법은 네가지가 있습니다. 1. 배열 선언 후 각 원소 각각 입력 int main(void) { int ar[3]; ar[0]=10; ar[1]=20; ar[2]=30; } 2. 중괄호 이용하여 입력 #include int main(void) { int ar[3]={10,20,30}; } 배열 크기를 비워놓아도 결과는 동일합니다. #include int main(void) { int ar[]={10,20,30}; } 3. 배열의 길이 보다 초기값을 덜 선언 #include int main(void) { int ar[3]={10,20}; } 나머지 값은 0으로 초기화됩니다. 2022. 3. 29.
[C언어] 배열 정의하기 배열을 정의하는 방법은 아래와 같습니다. 자료형을 선언할 때 대괄호 안에 배열의 길이를 넣어주면 됩니다. 아래 배열은 자료형이 정수이고 길이가 5인 배열입니다. int ar[5]; 각 배열 요소는 0 부터 시작됩니다. ar[0] 이 첫번째 요소이고, ar[4] 가 마지막 요소인 다섯번째 요소입니다. 아래는 배열 정의 예시입니다. #include int main(void) { int ar[5]; ar[0]=10; printf("첫번재 요소: %d",ar[0]); } 2022. 3. 29.
반응형