배열 이 뭐 예요?
우선 첫 번 째 질문: 배열 은 유형 입 니까?
이 질문 에 대답 하려 면 컴 파일 원리 의 측면 에서 유형 이 무엇 인지, 유형 은 특정한 값 의 집합 이다. 예 를 들 어 정형 (int, long, short), 문자 형 (char), 부동 소수점 형 (float, double) 이다.이런 측면 에서 볼 때 배열 은 일종 의 유형 으로 '복합 유형' 인 응용 유형 구조 기 역할 이 기본 적 인 유형 에서 형 성 된 것 이다.
두 번 째 질문. 이런 유형 은 어떤 특별한 점 이 있 나 요?
우 리 는 int a = 3 을 안다.이 문장의 의 미 는 변 수 를 정의 한 다음 에 우 리 는 작용 범위 내 에서 a 를 사용 하여 eg: a + + 를 연산 할 수 있다.컴 파일 러 는 기호 a 가 정형 숫자 3 을 대표 하 는 것 을 어떻게 알 았 습 니까?이것 은 기호 표 의 공로 다.우 리 는 변수 a 를 구성 할 때 주 소 를 가 져 와 a 라 고 명명 한 다음 에 컴 파일 할 때 a 의 관련 정 보 를 기호 표 에 저장 한 다음 에 a + + 작업 을 할 때 기호 표 에 따라 a 의 관련 정 보 를 찾 아 조작 합 니 다.
그러면 int a [3] = {1, 2, 3};때 는?분명히 a 는 특정한 주소 의 이름 이 아니다. 즉, 그것 은 하나의 기호 일 뿐 실제 존재 하지 않 는 다.즉, 그것 은 기호 표 의 주소 란 에 쓰기 가 쉽 지 않다 는 것 이다.그래서 아예 첫 주 소 를 주소 표시 줄 에 기입 하 세 요.그러나 & a 와 a 의 값 은 같 지만 유형 은 다르다. 잘 모 르 겠 으 면 두 가지 예 를 들 어 이해 하 겠 다.
배열 형식의 특수성 을 이해 하 는 데 도움:
1。컴 파일 러 는 배열 이름과 포인터 변 수 를 처리 하 는 방식 으로 컴 파일 할 때 기호 표를 만들어 기호 이름과 주 소 를 기록 합 니 다.포인터 변수 에 대해 서 는 이해 하기 쉽다.배열 의 이름 은 그리 뚜렷 하지 않다. 그것 은 단지 하나의 기호 일 뿐 인 데 주 소 는 무엇 입 니까?컴 파일 러 는 이렇게 처리 되 었 습 니 다. array [0] 의 주 소 를 기록 하 였 습 니 다.이것 은 우리 의 통상 적 인 이해 와 도 같다.2。아래 표 시 된 형식의 배열 과 포인터 주소 지정 방식 (1) 배열 상황 char a [9] = "abcdefgh";...c=a[i];컴 파일 기간 에 기호 표 에 이러한 기록 을 만 듭 니 다. name: a address: 9980 은 a [i] 의 값 을 두 단계 로 나 누 어야 합 니 다. step 1: i 의 값 을 얻 고 9980 과 step 2 를 추가 합 니 다. 메모리 주소 (9980 + i) 에서 내용 을 찾 습 니 다. (2) 포인터 상황 char * p = "abcdefgh";
...c=p[i];컴 파일 기간 에 기호 표 에 이러한 기록 을 만 듭 니 다. name: p address: 4624 는 p [i] 의 값 을 세 단계 로 나 누 어야 합 니 다. step 1: 메모리 주소 4624 곳 에서 그 내용 을 추출 합 니 다. 예 를 들 어 '5081' step 2: i 의 값 을 얻 고 5081 과 step 3: 메모리 주소 (5081 + i) 에서 그 내용 을 추출 합 니 다.
a 와 & a 값 은 같 지만 유형 은 다 릅 니 다.
#include
int a[2] = {1,2};
int main(){
printf("a = %p
", a); // I
printf("&a = %p
", &a); // II
printf("a + 1 = %p
", a + 1);// III
printf("&a + 1 = %p
", &a + 1);// IV
return 0;
}
요약: 배열 은 특수 한 유형 이 고 배열 의 '주소' 는 첫 번 째 주소 이 며 그의 값 도 첫 번 째 주소 이다.값 은 같 지만 유형 은 다르다.예 를 들 어 int a [3] = {1, 2, 3}, sizeof (a) 는 12 입 니 다. a 는 하나의 배열 이기 때 문 입 니 다.sizeof (& a) 는 4 입 니 다.여기까지 만 말 하면 기본 적 인 것 도 분명히 말 하 겠 지!
참조 링크:http://blog.chinaunix.net/uid-10221131-id-350168.html
http://www.cnblogs.com/hdu-2010/p/3557784.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.