C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[25256] C/C++의 독특한 배열 표현
박우성 [solgari] 5774 읽음    2015-09-16 11:35

C/C++에서 배열을 표현할 때, 보통 array[index]과 같은 형태로 사용하는 데, index[array]와 같이 사용해도 문제가 없다네요.
아시는 분도 있을 것 같은데, 저는 오늘 알았는데, 조금 쌩뚱맞네요 ^^

다음 코드는 정상적으로 컴파일 되는 아무런 문제가 없는 코드입니다.

	int a[5]={ 0, 1, 2, 3, 4 };

	a[3] = 10;
	3[a] = 20;

	cout << a[3] << endl;
	cout << 3[a] << endl;



대충 이런거겠죠
a[3]  ==  *(a+3)  ==  *(3+a)  ==  3[a]
양병규 [bkyang]   2015-09-16 14:03 X

진! 짜! 요?? @@;

index를 변수로 쓰면 엄청 헷갈리겠네요 ㅡㅡ;

혹시 자바는 안 그렇겠죠? 신기하네..
그 아이 [tsirorret]   2015-09-16 14:38 X
재미있는것 같아 테스트 해보니, 정말 그렇네요. 신기하네요.
양병규 [bkyang]   2015-09-16 15:16 X

아무리 생각해봐도 반대로 했을 때의 유익한 점은 생각나는 게 없는데요..
그냥 컴파일러 버그 아닐까요? 처음에 버그였는데.. 그냥 규약으로 굳어진..
그게 아니면 처음 c를 고안할 때 두 가지를 놓고 결정을 못해서 둘 다 남았거나..
암튼 재미남!
박우성 [solgari]   2015-09-16 17:23 X
C언어 규약인 것 같습니다.

https://en.wikibooks.org/wiki/C_Programming/Arrays

위의  페이지에 보면 "a[i] and i[a] refer to the same location"라는 내용이 있네요.

아마 배열과 포인터 연산의 상관관계 때문에 그런 것 같은데, 굳이 헷갈리게 코딩할 필요는 없는 듯 싶네요.
남병철.레조 [lezo]   2015-09-23 12:54 X
오.. 재밌네요. ㅎㅎ
저런 변태 코드는 못봤는데 .. 앞으로 늘어나겠네요. --;
김태선 [cppbuilder]   2015-09-23 15:58 X
    String s[3];
    2[s] = "하하하";

    Caption = s[2];

변태코드의 길은 멀고도 험하다.  ㅡ,,ㅡ
스탈리스 [sim51177]   2015-09-23 20:09 X
a[3]
이것은 다음과 같이 쓸 수 있습니다.
*(a+3)

그럼 3[a]을 포인터식으로 변환하면
*(3+a) 가 됩니다.

포인터와 정수의 덧셈 연산 동작은 피연산자중 포인터Type에 따라 컴파일 됩니다.
그래서 두개의 순서가 바뀌어도 아무 문제가 없는거죠. 즉 교환법칙이 성립 합니다.

요약하자면
a[3] == *(a+3) == *(3+a) == 3[a]
Nibble [gameover]   2015-09-28 23:32 X
선수들끼리.. ㅋㅋ offsetof 코드 한 번 보셨으면...

+ -

관련 글 리스트
25256 C/C++의 독특한 배열 표현 박우성 5774 2015/09/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.