C 의 수조 (25)
배열 은 연속 적 인 메모리 공간 에 요 소 를 저장 하고 배열 요소 의 개 수 는 표시 하거나 암시 적 으로 지정 할 수 있 습 니 다.예 를 들 어 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 을 추가 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.