C언어 포인터와 상수

1 개요[ | ]

C언어 포인터와 상수 관계

2 대상체 상수[ | ]

  • 대상체가 상수이기 때문에 값을 변경할 수 없다.
  • 상수인 대상체의 값 변경을 시도하면 컴파일 오류가 발생한다.

2.1 포인터 변수 1[ | ]

C
Copy
const int *p =  &i;
C
CPU
0.0s
MEM
14M
0.0s
Copy
#include <stdio.h>
void main() {
    int i = 1;
    const int *p = &i;
    *p = 2; // error: assignment of read-only location ‘*p’
}
runbox.c: In function 'main':
runbox.c:5:8: error: assignment of read-only location '*p'
     *p = 2; // error: assignment of read-only location ‘*p’
        ^
Command exited with non-zero status 1
bash: ./a.out: No such file or directory

2.2 포인터 변수 2[ | ]

C
Copy
int const *p = &i;
C
Copy
#include <stdio.h>
void main() {
    int i = 1;
    int const *p = &i;
    *p = 2; // error: assignment of read-only location ‘*p’
}
Loading

2.3 포인터 변수 3[ | ]

C
Copy
const int const *p = &i;
C
Copy
#include <stdio.h>
void main() {
    int i = 1;
    const int const *p = &i;
    *p = 2; // error: assignment of read-only location ‘*p’
}
Loading

3 대상체 변수[ | ]

3.1 포인터 상수[ | ]

  • 포인터가 상수이기 때문에 값을 변경 할 수 없다.
C
Copy
int * const p = &i;
C
Copy
#include <stdio.h>
void main() {
    int i = 1;
    int * const p = &i;
    p++; // error: increment of read-only variable ‘p’
}
Loading

3.2 포인터 상수[ | ]

  • 포인터가 상수이기 때문에 값을 변경 할 수 없다.
C
Copy
const int * const p = &i;
C
Copy
#include <stdio.h>
void main() {
    int i = 1;
    const int * const p = &i;
    p++; // error: increment of read-only variable ‘p’
}
Loading

4 같이 보기[ | ]

편집자 J Jmnote Jmnote bot
  • C, C++ 주석
    C에도 적용되는 주석 문법이라면, "C와 C++ 주석"으로 제목을 옮기면 어떨까요? Ykhwong
  • C, C++ 주석
    @Ykhwong 네네. 좋은 의견 입니다. 변경 부탁드려요. John Jeong
  • C, C++ 주석
    'C스타일 주석'이라는 제목도 괜찮겠네요.J Jmnote
  • C, C++ 주석
    'C, C++ 주석' 형태로 최종 가도록 하겠습니다. C와 C++ 까지의 현재 범위를 명확히 하려 합니다. John Jeong
  • C언어 연결리스트 구현
    마지막에 메모리 해지는 어떤식으로 해야되나요?? 돌멩이
  • C언어 연결리스트 구현
    @돌맹이 head 가 널까지 가는거 보시고 코드가 아름 답진 않지만 대략 아래 방법처럼 하나씩 삭제 하시면 될 것 같습니다. void deleteNode(nodeType *head) { nodeType *ptr = head, *ptr2 = NULL; while(ptr- John Jeong
  • C언어 연결리스트 구현
    답변 감사합니다! 돌멩이