c언어 배열 초기화 질문.
조회수 1313회
배열을 초기화 할 때, 배열이 많은 수, 100개 이상이면 int arr[100] = {1, 1, 1, 1, 1.......}
이렇게 할 순 없잖아요? 그래서 int arr[100] = {1};
로 주면 1차원 배열에서는 이게 다 1로 초기화가 되어야 하는데
dev c++에서는 0번지 값만 1로 초기화가 됩니다. 그럼 for문을 써서 다 초기화 시키는 방법도 있지만, 저 방법도 원래는 됐었는데.. 왜 안 되는 걸까요? (arr[100] = { -1, }
이것도 안 됩니다.)
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
3 답변
-
int arr[100] = { 0 };
으로 초기화하면 모든 값들이 0으로 초기화된다고 하는데 이게 모든 경우에 다 적용이 되는 것으로 생각하신게 아닐까 싶어요위 사이트를 참고하니 아래와 같은 방식으로 초기화한다고 하네요
int arr[100] = { [0 ... 99] = 1 };
안된다고 하셔서 더 찾아봤는데 아래와 같은 방법도 있었습니다.
마찬가지로 위 링크에 나와있는 방법이예요
#include <stdio.h> #define x1 1 #define x2 x1, x1 #define x4 x2, x2 #define x8 x4, x4 #define x16 x8, x8 #define x32 x16, x16 #define x64 x32, x32 int main(){ int arr[100] = { x64, x32, x4 }; // 64 + 32 + 4 = 100 printf("%d\n", arr[99]); // 출력: 1 return 0; }
처음에 정의한 x1이 1이 아니라 다른 값이어도 해당 값으로 전부 초기화가 됩니다.
여담이지만, 위에 안된다고 하셨던 코드의 경우에는 아래와 같은 방식으로 초기화도 가능합니다.
#include <stdio.h> int main(){ int arr[100] = {[0 ... 49] = 3, [50 ... 99] = 7}; printf("%d\n", arr[49]); // 출력: 3 printf("%d\n", arr[99]); // 출력: 7 return 0; }
- 어.. 안 됩니다.. 어떻게 해야 할까요옷 알 수 없는 사용자 2020.2.13 21:10
- 저도 첨봤는데, gcc 컴파일러만 지원하는 문법이라고 하네요. nowp 2020.2.13 21:34
- 아.. 아쉽군용 ㅠㅠ 알 수 없는 사용자 2020.2.13 22:17
- 여담으로 반절 반절 arr 초기화 방법 또한 되지 않네요.. 쨋든 감사합니당 알 수 없는 사용자 2020.2.13 22:18
-
보통 memset을 사용하지 않나요?
-
An array is a collection of data items having the same data type.
Initialization of Array at Compile Time and Run Time
https://theknowshares.com/computerscience/datastructure/arrays/
Initialization of Array at Compile Time:
int A[5] = {10,20,30,40,50};
Initialization of array at Run Time
//initialization of array for(j=0; j<n; j++) { printf("\n enter element %d :",j); scanf("%d",&a[j]); }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력