5줄짜리 배열 짧은 질문 하나 부탁드려여
미즈
#include stdio.hint main(){
int str[] = {1,2,3,4,5}; //이런식으로 int형 배열에 각각 1~5로 초기화. printf(%s, &str); //str 상수를 출력하고싶습니다. 1234가 나오게 하고싶습니다
return 0;}ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ원하는 결과값이12345입니다.제가 공부한 바로는 str은 상수와 같은데...배열을 초기화할때 12345 로 초기화 시킨거랑 1,2,3,4,5 랑 다른건가요?
-
알찬바로
그렇군요.
\윈도우 API\를 쓴 분도 \배열명은 포인터 상수다.\ 라고 말하고 있군요.
결국 그 이유로 sizeof(배열), &배열은 예외라고 말할 수 밖에 없구요.
\배열 이름의 자료형은 type[length] 이며, 값으로 사용될 때 주소값을 나타내며, 이것은 상수입니다.\
제가 하고자 하는 말입니다. -
설희
배열 이름은 배열의 참조입니다.
배열 이름이 대입이 안되는 것은 상수이기 때문이 아니고,
배열은 = 연산자로 대입할 수 없기 때문입니다.
const int a = 0; 에서 a 는 상수라기 보다는 읽기 전용 변수에 가깝습니다.
a 는 메모리에 대한 참조이기 때문입니다.
배열이름이 주소값이라고 하면,
sizeof(arr) 의 값이 배열의 용량이 되는 것은 또 어떻게 설명할 수 있습니까?
억지부리는 것이 아니고, 상식이라고만 할 것이 아니고,
모 -
코이
배열 이름이 뭡니까? 주소값이죠?
배열 이름에 대입이 됩니까? 안 되죠?
상수에 & 를 붙일 수 없다는 건 억지입니다.
상수는 리터럴 상수만 있는 게 아니라 심볼릭 상수도 있습니다.
const int a = 10; 이라고 할 때, &a 가 성립하지 않습니까?
추측만으로 말도 안 되는 논리 펼치시는 거 아닙니다.
배열이 주소값 상수인 것은 검증된 상식입니다. -
소심한여자
int[5] 라고 하시면서 주소값 상수라고 하시네요.
int[5] 는 그냥 배열이잖아요. 포인터 상수가 아니고...
주소값 상수라고 하시는 것은 결국 포인터를 말씀하시는 것이고
int * 형인 상수값을 말씀하시는 것 아닌가요?
str 은 상수가 아닙니다. 상수에는 & 을 붙일 수 없기 때문입니다.
배열을 주소값 상수라고 하는 것은
\배열을 평가하면 배열의 첫번째 요소의 주소가 얻어진다\는 말을
강조하기 위한 화법일 것입니다.
배열이 주소값 -
한뎃집
그럼 이렇게 말할까요? int[5] 형은 주소값 상수입니다.
누가 자료형이 int * 이라고 했나요?
님이 하신 말은 str 의 형이 int * 이 아니라는 걸 말했을 뿐,
str 이 상수가 아니라는걸 증명하지 못합니다만? ^_^
배열이 주소값 상수라는 건 입문서에도 나오는 상식입니다. -
큐트
T a;
라고 정의하면, a 의 자료형은 T 입니다.
위의 str의 정의를 다시 써보면,
typedef int T[5];
T str = {1,2,3,4,5};
str 의 자료형은 T 죠. int 가 5 개인 배열입니다. 즉, str 의 자료형은 int [5] 입니다.
sizeof(str) == sizeof(T) == sizeof(int[5])
이지
sizeof(str) == sizeof(int *)
는 아니죠.
자료형이 int * -
앨프레드
주소값 상수라니까요.
-
날개
상수 자료형이 뭔데요?
-
튼싹
배열 이름은 주소값 상수가 맞습니다.
배열 이름에 주소값 연산을 하면 자기 자신이 나옵니다. -
물병자리
아니 도대체 누가 str 이 상수라고 하나요?
str 은 배열이에요. 변수에 가깝죠.
여러 값이 묶여져 있어서 = 연산자를 쓰지 못할 뿐이지,
상수는 아닙니다.
상수라면 &5 가 에러이듯이,
&str 도 에러로 처리되어야 하잖아요.