배열, 포인터 주소 관련
246
작성한 질문수 2
#include <stdio.h>
int main()
{
//배열의 이름은 배열의 첫번째 인덱스 주소
int arr1[] = { 101, 102, 103 };
int arr2[] = { 104, 105, 106 };
printf("%p, %p, %p\n", &arr1, arr1, &arr1[0]);
int arr3[2][3] = { {1,2,3},{4,5,6} };
printf("%p, %p, %p\n\n", &arr3, arr3, &arr3[0]);
//포인터의 이름은 할당된 주소
//&포인터는 포인터도 변수니까 그에 대한 주소(자료형에 관계 없이 메모리 주소 사이즈)
int* prt = arr1;
printf("%p, %p, %p\n", &prt, prt, arr1);
int* parr[2] = {arr1[0],arr2[1]};
printf("%p, %p, %p\n", &parr, parr, arr1);
return 0;
}안녕하세요.
10.14 강의 내용 질문은 아니지만 이 강의부터 진도를 못나가고 있어요 ㅠ
'이름'에 대한 강조가 많아 혼란스러워 질문 드립니다.
1.
&배열이름($arr1)에서 배열 이름이 주소인데 앞에 &을 붙여 사용하는 경우도 있나요?
사용할 경우 그냥 arr1과 같은 주소 나오는 건가요?
2.
포인터에서 &prt와 prt 차이는
포인터도 변수니까 그에 대한 주소와
포인터에 할당된 주소 차이로 봐도 될까요?
3.
그런데 포인터[] 배열에서는 &parr, parr의 주소 같게 나오는데 이유가 궁금합니다. 이 주소는 변수 주소인가요?
늘 감사합니다.
답변 1
0
&배열이름($arr1)에서 배열 이름이 주소인데 앞에 &을 붙여 사용하는 경우도 있나요?
사용할 경우 그냥 arr1과 같은 주소 나오는 건가요?
>> 보통 배열의 이름이 곧 배열의 주소이기 때문에 굳이 &를 붙여 사용하지는 않는 것 같습니다.
결과는 첨부하신 코드를 실행해보면 알 수 있는데요, &arr1, arr1에 동일한 주소가 찍힘을 볼 수 있지요.
네, 그렇습니다.
1번의 답과 같습니다. 다만 parr자체가 주소이기 때문에 &parr로 사용하는 것보다 parr로 사용하는 것이 더 나은 용례입니다.
0
헷갈렸던 점이 '포인터 배열'을 포인터로만 생각해 포인터처럼 주소가 출력될줄 알았는데
배열처럼 주소가 나와서 였던거 같아요. 배열이라 생각하니 정리가 됩니다.
답변 감사합니다.
Export template 안됨
1
45
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
71
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
59
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
64
2
Visual Studio Community 2026 사용 문의
1
150
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
97
3
강의자리ㅛ
1
87
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
119
2
소스파일안에 여러 파일
1
81
2
F5와 F7의 차이
1
82
2
c = TWO * (a+b); 에서 a와 b는?
1
64
2
; 세미콜론을 붙이는 기준에 문의
1
73
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
81
2
int main 함수 관련 오류 문의
1
72
2
13.4 words[0]
0
64
2
11.7 함수를 구현해 봤습니다.
1
66
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
68
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
57
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





