[C] 왼쪽 과 오른쪽 에 대한 개인 적 인 사고
쿵 푸 는 마음 이 있 는 사람 을 저 버 리 지 않 고 진지 하 게 생각 하고 비교 하 며 정리 하면 실마리 가 있 으 니 기록 하 세 요.나중에 또 잊 어 버 리 지 않도록 참고 하지 않 았 다.
왼쪽 값 과 오른쪽 값 의 정 의 를 먼저 이야기 합 시다.
왼쪽 값 은 할당 기호 왼쪽 에 나타 날 수 있 는 것 입 니 다.따라서 오른쪽 값 은 할당 기호 오른쪽 에 나타 날 수 있 는 것 이다.
예 를 들 어:
a = b + 25;
a 는 결과 값 을 저장 할 수 있 는 장 소 를 표시 하기 때문에 왼쪽 값 입 니 다.b + 25 는 오른쪽 값 입 니 다. 값 을 지정 하기 때 문 입 니 다.
얘 네 바 꿀 수 있어 요?즉 b + 25 = a;
원래 왼쪽 값 의 a 로 사용 되 었 는데, 이 때 는 오른쪽 값 으로 도 사용 할 수 있 습 니 다. 각 위치 에 하나의 값 이 포함 되 어 있 기 때 문 입 니 다.그 다음 에 b + 25 는 왼쪽 값 으로 할 수 없습니다. 왜냐하면 특정한 위 치 를 표시 하지 않 았 기 때 문 입 니 다.따라서 이 할당 문 구 는 잘못 되 었 다.
컴퓨터 가 b + 25 를 계산 할 때 그 결 과 는 반드시 기계 의 어 딘 가 에 저 장 됩 니 다.그러나 프로 그 래머 는 이 결과 가 어디 에 저 장 될 지 예측 할 수 없고, 이 표현 식 의 값 이 다음 에 그곳 에 저 장 될 지 장담 할 수 없다.그 결과 이 표현 식 은 왼쪽 값 이 아 닙 니 다.같은 이치 에 근거 하여 글자 액면가 (상수) 도 모두 왼쪽 값 이 아니다.
위의 정 리 를 보 니 이런 느낌 이 들 지 않 습 니까? 변 수 는 왼쪽 값 으로 할 수 있 고 표현 식 은 왼쪽 값 으로 할 수 없습니다.
사실 상황 이 그렇지 않다 는 착각 이다. 다음은 이런 상황 을 전문 적 으로 정리 하 자.
첫 번 째 예:
int a[30];
...
a[b+10] = 0;
[] 다음 표 참조 연산 자 이기 때문에 왼쪽 은 실제 표현 식 이지 만 합 법 적 인 왼쪽 값 입 니 다. 특정한 위치, 이 배열 의 특정한 위 치 를 표시 하기 때 문 입 니 다.
두 번 째 예:
int a, *p;
...
p = &a;
*p = 20;
첫 번 째 할당 문 구 는 자 연 스 럽 게 말 할 필요 가 없습니다. 정형 변 수 를 가리 키 는 포인터 변 수 는 특정한 위치 에 변수 a 를 저장 하 는 주 소 를 지정 하고 p 는 왼쪽 값 으로 할 수 있 습 니 다.
두 번 째 할당 문 구 는 중점적으로 분석 해 야 한다.
이 표현 식 을 왼쪽 값 으로 이해 하기 전에 * 이 조작 자 를 알 아 보 세 요.
* 이것 은 간접 적 으로 접근 하 는 연산 자 입 니 다.
포인터 로 가리 키 는 주 소 를 방문 하 는 과정 을 간접 접근 (indirection) 또는 참조 포인터 (dereferencing the pointer) 라 고 합 니 다.
좀 이해 가 안 되 죠?
다음은 위의 * p 를 왼쪽 값 으로 표현 하 는 의 미 를 직접 보 여 줍 니 다. * p 는 왼쪽 값 으로 포인터 변수 p 가 가리 키 는 주 소 를 대표 합 니 다.
또는 포인터 p 의 값 은 메모리 의 특정한 위치 에 있 는 주소 입 니 다. * 연산 자 는 기 계 를 그 위 치 를 가리 키 게 합 니 다.왼쪽 값 으로 사용 할 때 이 표현 식 은 수정 할 위 치 를 지정 합 니 다.그것 이 오른쪽 값 일 때, 그것 은 현재 이 위치 에 저 장 된 값 을 추출 하 는 것 이다.
아직 잘 모 르 겠 는데?그럼...
실제 적 인 예 를 들다.
//
int a = 112, b = -1;
float c = 3.14;
int *d = &a;
float *e = &c;
d 의 값 은 a 의 위치 (& a) 이 고 100 으로 가정 합 니 다.
d 에 간접 접근 조작 자 를 사용 할 때 메모리 위치 100 에 접근 하고 그 값 을 살 펴 보 는 것 을 표시 합 니 다.
따라서 * d 의 오른쪽 값 은 112 이다.왼쪽 값 은 그 위치 자 체 를 가리 키 기 때문에 100 그 자체 이다.
저 는 이 실제 적 인 예 를 들 고 싶 습 니 다. 여러분 은 왼쪽 과 오른쪽 값 의 의 미 를 이미 알 고 있 지만 분 노 를 피 할 수 없습니다.(정말 jr 이해 하기 어려워, 정말 jr 귀찮아!) 아, 능숙 함 으로 자신 을 위로 할 수 밖 에 없어.
지침 표현 식 에 대해 저 는 다음 에 박문 을 통 해 깊이 있 는 내용 을 소개 하 겠 습 니 다. 복잡 하 다 고 할 수 있 지만 이 언어 를 깊이 파악 하려 면 연구 에 힘 써 야 합 니 다.
본 고 는 이라는 책 을 참고 하지만 안에 그림 을 그 리 는 방법 을 나 는 정말 받 아들 일 수 없어 서 나 를 현혹 시 켰 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.