programing

C의 Const 배열

abcjava 2023. 9. 13. 22:16
반응형

C의 Const 배열

원래 질문:정의할 경우:

const int z[5] = {10, 11, 12, 13, 14}; 

다음을 의미합니까?

  1. 이것은 정수의 상수 배열입니다. 즉 z가 가리키는 주소는 항상 일정하고 결코 변경할 수 없지만 z의 요소는 변경할 수 있습니다.

오어

  1. 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읽기 전용이지만 실행 시간까지는 값을 확인할 수 없습니다.

당신의 경우 답은 다음과 같습니다.

  1. z의 각 원소는 상수입니다. 즉, 그 값은 절대로 변할 수 없습니다.

다음을 생성할 수 없습니다.constarray는 객체이며 런타임에만 생성할 수 있기 때문에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

반응형