C 언어 포인터 개념의 상세 한 해석

2665 단어 C 언어포인터
컴퓨터 의 모든 데 이 터 는 메모리 에 넣 어야 합 니 다.서로 다른 유형의 데이터 가 사용 하 는 바이트 수 는 다 릅 니 다.예 를 들 어 int 는 4 개의 바이트,char 는 1 개의 바이트 를 차지 합 니 다.이 데 이 터 를 정확하게 접근 하기 위해 서 는 각 바이트 에 번 호 를 매 겨 야 한다.문패 번호,주민등록번호 처럼 각 바이트 의 번 호 는 유일 하 며 번호 에 따라 특정한 바이트 를 정확하게 찾 을 수 있다.
다음 그림 은 4G 메모리 의 바이트 당 번호 입 니 다(16 진수 로 표시).

메모리 에 있 는 바이트 의 번 호 를 주소(Address)나 포인터(Pointer)라 고 합 니 다.주 소 는 0 부터 순차적으로 추 가 됩 니 다.32 비트 환경 에 대해 프로그램 이 사용 할 수 있 는 메모 리 는 4GB 이 고 가장 작은 주 소 는 0 이 며 가장 큰 주 소 는 0xFFFFFF 입 니 다.
다음 코드 는 주 소 를 출력 하 는 방법 을 보 여 줍 니 다.

#include <stdio.h>
int main(){
 int a = 100;
 char str[20] = "c.biancheng.net";
 printf("%#X, %#X
", &a, str); return 0; }
실행 결과:
0X28FF3C, 0X28FF10
%\#X 는 16 진법 으로 출력 하고 접두사 0 X 를 추가 합 니 다.a 는 정 수 를 저장 하 는 변수 입 니 다.앞 에&를 추가 하여 주 소 를 가 져 와 야 합 니 다.str 자체 가 문자열 의 첫 주 소 를 나타 내 므 로 추가&할 필요 가 없습니다.
모든 것 이 주소 입 니 다.
C 언어 는 변수 로 데 이 터 를 저장 하고 함수 로 중복 사용 할 수 있 는 코드 를 정의 합 니 다.그들 은 최종 적 으로 메모리 에 넣 어야 CPU 가 사용 할 수 있 습 니 다.
데이터 와 코드 는 모두 바 이 너 리 형식 으로 메모리 에 저장 되 어 있 으 며,컴퓨터 는 어떤 메모리 가 데이터 인지 코드 인지 형식 적 으로 구분 할 수 없다.프로그램 이 메모리 에 불 러 오 면 운영 체 제 는 서로 다른 메모리 블록 에 서로 다른 권한 을 지정 합 니 다.읽 기와 실행 권한 을 가 진 메모리 블록 은 코드 이 고 읽 기와 쓰기 권한(읽 기 권한 만 있 을 수도 있 습 니 다)을 가 진 메모리 블록 은 데이터 입 니 다.
CPU 는 메모리 에 있 는 코드 와 데 이 터 를 주소 로 만 가 져 올 수 있 으 며,프로그램 은 실행 과정 에서 CPU 가 실행 할 코드 와 읽 고 쓸 데이터 의 주 소 를 알려 줍 니 다.프로그램 이 잘못 되 었 거나 개발 자가 의도 적 으로 데 이 터 를 쓰 려 고 할 때 코드 영역의 주 소 를 주면 메모리 접근 오류 가 발생 합 니 다.이러한 메모리 접근 오 류 는 하드웨어 와 운영 체제 에 의 해 차단 되 고 프로그램 이 무 너 지 며 프로그래머 가 구 할 기회 가 없다.
CPU 가 메모리 에 접근 할 때 필요 한 것 은 변수 이름과 함수 이름 이 아 닌 주소 입 니 다!변수 이름과 함수 이름 은 주소 의 보조 기호 일 뿐 원본 파일 이 실행 가능 한 프로그램 으로 컴 파일 되 고 링크 되면 주소 로 대 체 됩 니 다.컴 파일 과 링크 과정의 중요 한 임 무 는 이 이름 에 해당 하 는 주 소 를 찾 는 것 이다.
변수 a,b,c 가 메모리 에 있 는 주소 가 각각 0X 1000,0X 2000,0X 3000 이 라 고 가정 하면 덧셈 c=a+b;다음 과 같은 형식 으로 변 환 됩 니 다:
0X3000 = (0X1000) + (0X2000);
()값 추출 작업 을 표시 합 니 다.전체 표현 식 은 주소 0x 1000 과 0x 2000 의 값 을 추출 하여 추가 한 결 과 를 0x 3000 의 메모리 에 할당 한 다 는 뜻 입 니 다.
변수 이름과 함수 명 은 코드 를 작성 하 는 과정 에서 읽 기 쉽 고 이해 하기 쉬 운 영어 문자열 을 사용 할 수 있 도록 편 의 를 제공 합 니 다.바 이 너 리 주 소 를 직접 마주 하지 않 아 도 됩 니 다.그 장면 은 정말 무 너 집 니 다.
주의해 야 할 것 은 변수 명,함수 명,문자열 명 과 배열 명 은 본질 적 으로 같 지만 모두 주소 의 보조 기호 이지 만 코드 를 작성 하 는 과정 에서 변수 명 은 데이터 자 체 를 나타 내 고 함수 명,문자열 명 과 배열 명 은 코드 블록 이나 데이터 블록 의 첫 주 소 를 나타 낸다 고 생각 합 니 다.
프로그램 메모리,컴 파일 링크,실행 가능 한 파일 의 구조 와 이름 에 해당 하 는 주 소 를 어떻게 찾 는 지 에 대해 저 희 는 과 주제 에서 깊이 연구 할 것 입 니 다.
 이상 C 언어의 지침 에 대해 상세 하 게 소 개 했 습 니 다.추 후 관련 자 료 를 계속 보충 하 겠 습 니 다.여러분 의 본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기