C 의 수조 (25)

C 언어 에서 우 리 는 수조 에 접촉 하 는 것 을 피 할 수 없다.배열 이 무엇 인지 살 펴 보 자. 사실은 배열 은 같은 유형의 변수의 질서 있 는 집합 이다.다음 그림 은 배열 의 의 미 를 더욱 구체 적 으로 나타 낸다.
        배열 은 연속 적 인 메모리 공간 에 요 소 를 저장 하고 배열 요소 의 개 수 는 표시 하거나 암시 적 으로 지정 할 수 있 습 니 다.예 를 들 어 int a [5] = {1, 2};int b[] = {1, 2};그럼 문제 가 왔 습 니 다. 배열 a 중 나머지 지정 되 지 않 은 세 개 수 는 얼마 입 니까?배열 b 는 도대체 몇 개의 요 소 를 포함 하고 있 습 니까?우리 내 려 와 서 실험 을 해 보 자. 코드 는 다음 과 같다.
#include 

int main()
{
    int a[5] = {1, 2};
    int b[] = {1, 2};
    
    printf("a[2] = %d
", a[2]);     printf("a[3] = %d
", a[3]);     printf("a[4] = %d
", a[4]);          printf("sizeof(a) = %d
", sizeof(a));     printf("sizeof(b) = %d
", sizeof(b));     printf("count for a: %d
", sizeof(a)/sizeof(int));     printf("count for b: %d
", sizeof(b)/sizeof(int));          return 0; }

        컴 파일 후 결 과 는 다음 과 같다.
        그러면 컴 파일 러 가 기본적으로 지정 한 배열 뒤에 가리 키 지 않 은 요 소 는 모두 0 이 고 암시 적 으로 지정 한 배열 의 크기 는 그들 이 포함 하 는 요소 의 개수 입 니 다.
        그럼 다음은 배열 주소 와 배열 이름 의 관 계 를 살 펴 보 겠 습 니 다.배열 이름 은 배열 의 첫 번 째 요 소 를 대표 하 는 주소 입 니 다. 배열 의 주 소 는 주소 부 & 를 가 져 와 야 얻 을 수 있 습 니 다.배열 의 첫 번 째 요소 의 주 소 는 배열 의 주소 값 과 같 지만 배열 의 첫 번 째 요소 의 주소 와 배열 의 주 소 는 서로 다른 개념 이다.우리 가 실험 을 하면 이 단락 이 말 한 개념 을 더욱 명확 하 게 이해 할 수 있다. 코드 는 다음 과 같다.
#include 

int main()
{
    int a[5] = { 0 };

    printf("a = %p
", a);     printf("&a = %p
", &a);     printf("&a[0] = %p
", &a[0]);          return 0; }

        컴 파일 결 과 는 다음 과 같다.
        우 리 는 세 개의 주소 가 같은 것 을 보 았 다.배열 이름 은 첫 번 째 요소 의 첫 번 째 주 소 를 대표 합 니 다. 여기 서 첫 번 째 와 세 번 째 는 같은 의미 입 니 다.하지만 두 번 째 는 그들 이 대표 하 는 의미 와 다르다.예 를 들 어 인민 대 회 를 개최 할 때 모든 사람 이 그들 각자 의 성 을 대표 하 는데 이때 그 혼자서 그들의 성의 의견 을 대표 할 수 있다.그러나 당신 은 그 와 그의 성 이 하나의 개념 이 라 고 말 할 수 있 습 니까? 분명히 다 릅 니 다. 단지 특정한 환경 에서 똑 같 을 뿐 입 니 다.
        다음은 재 미 있 는 배열 명 을 소개 하 겠 습 니 다. 사실은 상수 지침 으로 볼 수 있 습 니 다.배열 이름 '지향' 은 메모리 에 있 는 배열 의 첫 번 째 요소 의 시작 위치 이지 만 배열 이름 은 배열 의 길이 정 보 를 포함 하지 않 습 니 다.표현 식 에서 배열 이름 은 오른쪽 값 으로 만 사용 할 수 있 습 니 다. 다음 두 가지 상황 에서 만 배열 이름 은 상수 지침 으로 볼 수 없습니다. a > 배열 이름 은 size of 연산 자의 매개 변수 입 니 다.b > 배열 이름 은 & 연산 자의 매개 변수 입 니 다.내 려 와 서 우 리 는 다시 예시 코드 를 분석 해 보 자. 코드 는 다음 과 같다.
#include 

int main()
{
    int a[5] = {0};
    int b[2];
    int* p = NULL;
    
    p = a;
    
    printf("a = %p
", a);     printf("p = %p
", p);     printf("&p = %p
", &p);     printf("sizeof(a) = %d
", sizeof(a));     printf("sizeof(p) = %d
", sizeof(p));         printf("
");     p = b;          printf("b = %p
", b);     printf("p = %p
", p);     printf("&p = %p
", &p);     printf("sizeof(b) = %d
", sizeof(b));     printf("sizeof(p) = %d
", sizeof(p));          b = a;        return 0; }

        우 리 는 9 줄 에서 배열 이름 a 를 포인터 p 에 할당 합 니 다. 이것 은 맞습니다. 배열 이름 은 배열 의 첫 번 째 요소 의 첫 번 째 주소 로 볼 수 있 기 때 문 입 니 다.이 어 a 와 p 를 인쇄 하 는 주 소 는 같 아야 하지만 포인터 도 변수 이 고 그 자체 에 도 주소 가 있 기 때문에 13 줄 에서 인쇄 한 주 소 는 앞의 두 주소 와 다 를 것 입 니 다.다음 인쇄 배열 a 의 크기 는 20 이 고 포인터 p 의 크기 는 4 일 것 입 니 다.지정 한 배열 a 와 암시 적 으로 지정 한 배열 b 를 표시 하 는 상황 은 같 을 것 입 니 다.그러나 27 번 째 줄 은 두 개의 배열 이름 으로 할당 작업 을 하 는데 오류 가 발생 할 수 있 습 니 다.다른 측면 에서 볼 때, 우 리 는 앞에서 배열 이름 을 상수 지침 으로 볼 수 있다 고 말 했다. 그러면 우 리 는 상수 지침 을 다른 상수 지침 에 할당 하면 틀림없이 실 수 를 할 것 이다.다음은 컴 파일 결 과 를 살 펴 보 겠 습 니 다.
        컴 파일 이 틀 렸 습 니 다. 우 리 는 27 줄 을 주석 하고 다시 컴 파일 합 니 다.
        우 리 는 결과 가 우리 가 분석 한 것 과 일치 하 는 것 을 보 았 다.배열 에 대한 학습 을 통 해 다음 과 같이 요약 한다. 1. 배열 은 연속 적 인 메모리 공간 이다.2. 배열 의 주소 와 배열 의 첫 번 째 요소 의 주소 의미 가 다르다.3. 배열 이름 은 대부분 상황 에서 상수 지침 으로 처리 되 고 단수 배열 이름 은 지침 이 아니 므 로 지침 과 같 을 수 없습니다.
        모두 함께 C 언어 를 공부 하 러 오신 것 을 환영 합 니 다. 저 에 게 QQ: 243343083 을 추가 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기