I는 다음과 같이 정의 된 포인터는 다음과 같습니다는 음의 배열 인덱스는
A ***b;
무엇을 수행 할 다음과 같이 접근 : 우리는 부정적인 인덱스를 사용하고 있기 때문에
A** c = b[-1]
액세스 위반이인가 배열로? 또는 *--b
과 유사한 법적 조치입니까?
EDIT 제외 배열 인덱싱 C 및 C++ 다른 지원이 있는지 참고. 따라서 this은 속는 것이 아닙니다.
I는 다음과 같이 정의 된 포인터는 다음과 같습니다는 음의 배열 인덱스는
A ***b;
무엇을 수행 할 다음과 같이 접근 : 우리는 부정적인 인덱스를 사용하고 있기 때문에
A** c = b[-1]
액세스 위반이인가 배열로? 또는 *--b
과 유사한 법적 조치입니까?
EDIT 제외 배열 인덱싱 C 및 C++ 다른 지원이 있는지 참고. 따라서 this은 속는 것이 아닙니다.
X[Y]
는 긴 X
중 하나 Y
포인터 형이고, 다른 하나는 일체형를 갖는 한 동일 에 *(X + Y)
이다. 따라서 b[-1]
은 *(b - 1)
과 동일합니다. 이는 잘 형성된 프로그램에서 평가되거나 평가되지 않을 수있는 표현입니다. –은 모두 b
의 초기 값에 따라 다릅니다! 예를 들어, 다음은 완벽하게 괜찮 : 일반적으로
int q[24];
int * b = q + 13;
b[-1] = 9;
assert(q[12] == 9);
, 그것은 프로그래머와 같은 책임은 당신이 그들과 함께 작업을 수행 할 때 포인터가 허용 값을 보장하는 것입니다. 잘못하면 프로그램에 정의되지 않은 동작이 발생합니다. 예를 들어 :
std::cout << 2["Good morning"] << 4["Stack"] << 8["Overflow\n"];
정의되지 않은 동작이 발생하는 예제를 작성해야한다고 생각합니다. –
@RSahu : 좋습니다. –
"Ok \ n"인쇄를위한 엄지 손가락 업. 내가 할 수 있다는 것을 몰랐다! – Deamonpog
는 참조 http://stackoverflow.com/questions/3473675/negative-array-indexes :
마지막으로, 단지 원래의 문을 강화하기 위해, 다음도 괜찮습니다 -in-c – Messa
3 성급 프로그래머가 되신 것을 축하드립니다. – chris
우리가 실제로'b '를 초기화하는 것을 볼 때까지는 합법적이지만 꽤 좋지 않고 잠재적으로 정의되지 않은 동작입니다. – Jeff