C의 Const 배열
원래 질문:정의할 경우:
const int z[5] = {10, 11, 12, 13, 14};
다음을 의미합니까?
- 이것은 정수의 상수 배열입니다. 즉 z가 가리키는 주소는 항상 일정하고 결코 변경할 수 없지만 z의 요소는 변경할 수 있습니다.
오어
- z의 각 원소는 상수입니다. 즉, 그 값은 절대로 변할 수 없습니다.
편집:
자세한 정보:
또 다른 변수가 있습니다.
const int *y = z;
func((int *) y);
여기서 func는 다음과 같이 정의됩니다.
void func(int y[]) {
int i;
for(i = 0; i < 5; i++) {
y[i] = i; //y[i] can be set to any integer; used i as example
}
}
func에서 y를 사용하여 배열을 횡단하고 각 요소를 변경합니다.z의 모든 원소가 일정한데도 이것이 유효합니까?
그것은 각각의 요소가z
읽기 전용입니다.
대상을z
는 포인터 개체가 아닌 배열 개체입니다. 아무것도 가리키지 않습니다.다른 물체와 마찬가지로, 주소는z
수명 동안에는 변경되지 않습니다.
그 물건 이후로 z
는 배열, 표현식은 z
, 모든 컨텍스트가 아닌 대부분의 경우 를 가리키는 포인터 식으로 암묵적으로 변환됩니다.z[0]
. 그 주소는 전체 배열 개체의 주소와 같습니다.z
, 개체의 수명 동안에는 변하지 않습니다.이 "변환"은 런타임 유형 변환이 아니라 식의 의미를 컴파일 타임으로 조정한 것입니다.
배열과 포인터 사이의 (종종 혼란스러운) 관계를 이해하려면 comp.lang.c FAQ의 섹션 6을 읽으십시오.
'불변'이라는 것을 이해하는 것이 중요합니다.const
서로 다른 두 가지입니다.
만약 어떤 것이 일정하다면, 그것은 컴파일 타임에 평가됩니다. 예를 들어,42
그리고.(2+2)
일정한 표현입니다.
객체가 정의되어 있는 경우const
키워드는 읽기 전용임을 의미하며, (무제한적으로) 일정하지 않습니다.즉, 개체의 이름을 통해 개체를 수정할 수 없으며 다른 방법으로 개체를 수정하려는 경우(예: 개체의 주소를 가져다가 비정수 포인터로 캐스팅하는 경우), 정의되지 않은 동작이 발생합니다.예를 들어, 다음과 같은 점에 유의합니다.
const int r = rand();
유효합니다.r
읽기 전용이지만 실행 시간까지는 값을 확인할 수 없습니다.
당신의 경우 답은 다음과 같습니다.
- z의 각 원소는 상수입니다. 즉, 그 값은 절대로 변할 수 없습니다.
다음을 생성할 수 없습니다.const
array는 객체이며 런타임에만 생성할 수 있기 때문에const
개체는 컴파일 시에 해결됩니다.
그래서.const
아래 첫 번째 예와 같이 해석됩니다. 즉, 배열의 요소에 적용됩니다.즉, 다음이 동등하다는 뜻입니다.
int const z[5] = { /*initial (and only) values*/};
const int z[5] = { /*-//-*/ };
이것은 어떤 유형의 교환 속성입니다.const
지정자:및형자예f(예:int
.
다음은 상수의 사용을 명확히 설명하는 몇 가지 예입니다.
정의: (). 1. 상수 정수 정의: (재할당 불가).의 두 의서의용두fe의nn의es서두oewfconst
동치입니다:과다는다.
int const a = 3; // after type identifier
const int b = 4; // equivalent to before type qualifier
2. 상수 포인터 정의(포인터 산술 또는 재할당 금지):
int * const p = &anInteger; // non-constant data, constant pointer
정의를 를 합니다 로 합니다 로 를 int
할 수 는 변경할 수 있습니다은할수만는할수다트할)수다:(는) )
const int *p = &anInteger; // constant data, non-constant pointer
언급URL : https://stackoverflow.com/questions/32705419/const-arrays-in-c
'programing' 카테고리의 다른 글
마리아DB는 키 길이 없이 BLOB 열에 색인을 작성할 수 있습니까? (0) | 2023.09.13 |
---|---|
.htaccess, mod_https 및 기본 인증 (0) | 2023.09.13 |
wp_get_attachment_image에 속성 추가 (0) | 2023.09.13 |
요소의 텍스트 노드를 가져오는 방법? (0) | 2023.09.08 |
세션에 목록 저장 (0) | 2023.09.08 |