programing

C에 포인터를 사용하는 컨스트럭트

minimums 2023. 10. 30. 20:51
반응형

C에 포인터를 사용하는 컨스트럭트

제가 C를 검토하고 있는데 관련해서 질문이 있습니다.const포인터를 이용한 용법저는 다음 코드를 이해합니다.

const char *someArray

이것은 char의 종류들을 가리키는 포인터를 정의하는 것입니다.const수식어는 다음에 저장된 값을 의미합니다.someArray변경할 수 없습니다.그런데 다음의 의미는 무엇일까요?

char * const array

이것은 "array"라는 이름의 배열에 대한 문자 포인터인 매개 변수를 지정하는 대체 방법입니까?const수정할 수 없습니까?

마지막으로, 이 조합이 의미하는 바는 무엇입니까?

const char * const s2

참고로, 이것들은 7장의 Deitel C 프로그래밍 북에서 가져온 것이고 이것들은 모두 함수에 전달되는 매개변수로 사용됩니다.

const char*말씀하신 것처럼 (적어도 (일정성을 버리지 않고) 포인터를 통해서는) 문자의 값을 변경할 수 없는 문자입니다.

char* const는 문자를 가리키는 포인터로, 문자를 바꿀 수는 있지만 포인터가 다른 문자를 가리키게 할 수는 없습니다.

const char* const는 상수 문자에 대한 상수 포인터입니다. 즉, 포인터가 가리키는 위치나 포인터의 값을 변경할 수 없습니다.

constint*, constint * const, int const *의 차이점은 무엇입니까?

거꾸로 읽어보세요...

int* - pointer to int
int const * - pointer to const int
int * const - const pointer to int
int const * const - const pointer to const int
//pointer to a const
void f1()
{
    int i = 100;
    const int* pi = &i;
    //*pi = 200; <- won't compile
    pi++;
}

//const pointer
void f2()
{
    int i = 100;
    int* const pi = &i;
    *pi = 200;
    //pi++; <- won't compile
}

//const pointer to a const
void f3()
{
    int i = 100;
    const int* const pi = &i;
    //*pi = 200; <- won't compile
    //pi++; <- won't compile

}

한 번 해보세요.cdecl:

~ $cdecl도움말을 보려면 'help' 또는 '?'를 입력합니다.cdecl> constchar *someArray 설명일부 배열을 성소 포인터로 선언cdecl> 설명 char * constome Array일부 배열을 char의 상수 포인터로 선언cdecl> 설명 구문 * consts2s2를 constchar에 대한 const 포인터로 선언합니다.cdecl>
char * const array;

포인터가 일정하다는 뜻입니다.또한.

const * const char array;

일정한 메모리에 대한 일정한 포인터를 의미합니다.

다른 사용자가 작성한 내용을 반복하지만 컨텍스트를 제공하고 싶습니다.

다음 두 가지 정의를 사용합니다.

void f1(char *ptr) {
    /* f1 can change the contents of the array named ptr;
     * and it can change what ptr points to */
}
void f2(char * const ptr) {
    /* f2 can change the contents of the array named ptr;
     * but it cannot change what ptr points to */
}

포인터 자체 만들기const, f2 예처럼, 거의 의미가 없습니다.함수에 전달되는 모든 파라미터는 값으로 전달됩니다.함수가 이 값을 변경하면 로컬 복사본만 변경되고 호출 코드에는 영향을 주지 않습니다.

/* ... calling code ... */
f1(buf);
f2(buf);

어느 경우든buf함수 호출 후에는 변경되지 않습니다.


strcpy() 함수를 고려합니다.

char *strcpy(char *dest, const char *src);

한 가지 가능한 구현 방법은

char *strcpy(char *dest, const char *src) {
    char *bk = dest;
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = *src;
    return bk;
}

이 구현은 두 가지 모두를 바꿉니다.dest그리고.src기능 내에서만 사용 가능합니다.포인터(또는 둘 다) 만들기conststrcpy () 함수나 호출 코드에 대해서는 아무것도 얻을 수 없습니다.

언급URL : https://stackoverflow.com/questions/1446120/const-usage-with-pointers-in-c

반응형