배열 이 뭐 예요?

2569 단어
최근 데이터 구조 에서 의 행렬 압축 저장 을 배 울 때 여러 배열 과 관련 된 조작 이 있 었 다.배열 을 사용 할 때 배열 이라는 것 에 대해 모 르 고 다음은 제 가 그 에 대한 이해 입 니 다.
우선 첫 번 째 질문: 배열 은 유형 입 니까?
      이 질문 에 대답 하려 면 컴 파일 원리 의 측면 에서 유형 이 무엇 인지, 유형 은 특정한 값 의 집합 이다. 예 를 들 어 정형 (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

좋은 웹페이지 즐겨찾기