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
'programing' 카테고리의 다른 글
| WordPress가 특정 기능을 가진 사용자를 나열하는 방법 (0) | 2023.10.30 |
|---|---|
| 내 SQL 복제에 즉각적인 데이터 일관성이 있습니까? (0) | 2023.10.30 |
| XPath 사용 - Windows 이벤트 로그를 검색하기 위해 시작하거나 포함하는 기능 (0) | 2023.10.30 |
| wp_insert_post를 사용하여 특징 이미지 설정 (0) | 2023.10.30 |
| 플래시가 설치되어 있는지 확인하고, 설치되어 있지 않은 경우 사용자에게 알려주는 숨겨진 디바를 표시하려면 어떻게 해야 합니까? (0) | 2023.10.30 |