(C++ : Template) (참고) 배열의 이름은 주소일까?

Posted by : at

Category : Cpp


int main()
{
  int x[3] = {1,2,3};
  int *p = x;   // 배열의 이름은 무조건 배열의 주소인가? -> 여기서 부터 시작한다
}
int main()
{
  int n ;
  int *p1 = &n;
  
  double d;
  double* p2 = &d;
  
  int x[3] = {1,2,3}; 
  // x의 타입 : int[3]
  int *p3[3] = &x;   // 이렇게 주소를 담을 수 있을까?
  // 되긴한데... 컴파일러가 헷갈리니깐
  int (*p3)[3] = &x;  // 요렿게 표현하자
}
int main()
{
  int n ;
  int n2 = n;
  
  double d;
  double d2 = d;
  
  int x1[3] = {1,2,3}; 
  int x2[3] = x1;       // 배열은 메모리를 많이 먹기에 이런식의 초기화를 지원하지 않음.
  
  int *p1 = x1;    // 단, 배열의 초기값을 암시적 형변환하여 전달 가능

아니 뭔 소리야 똑같은 말아님??
배열의 주소나 배열의 첫 번째 주소나??

#include <stdio.h>

int main()
{
  int x[3] = {1,2,3};
  
  int (*p1)[3] = &x;    // 배열의 주소
  int *p2 = x;          // 배열의 첫 번째 주소
  
  printf("%p\n", p1);
  printf("%p\n", p2);
  // 똑같은디??
  
  p1++;   // 12 bytes plus
  p2++;   // 4 bytes plus
  // 이 차이이다
  
  (*p1)[0] = 10;    // p1은 배열이기에 역참조해서 특정 요소에 접근해야함.
  *p2 = 10;         // p2는 배열의 첫 번째 요소의 주소이기에 접근후 바로 값 변경가능
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links