홈>
따라서 포인터 p가 있고 i와 j 값이 차례로 정의되어있는 경우 스택의 값이 차례로 나타납니다. 그러나 적어도 저에게는 그렇지 않습니다.
int i = 10;
int j = 20;
int *p = &i;
p++;
(*p) = 30;
std::cout << i << " " << j << " " << (*p) << "\n" ;
대신이 값을 인쇄합니다.
내가
10 20 30
를 언급하면
대신
(*p) = 30;
내부
빈 주소가됩니다.
*p
에서 내 참조를 변경할 것이라고 생각했습니다.
i
로
그리고
j
(*p)
의 가치를 바꿀 것입니다
하지만 분명히 그렇지 않습니다.
그래서 무슨 뜻인지 궁금 하신가요?
j
- 답변 # 1
- 답변 # 2
I thought that the ++ operator in this case will change my reference from i to j and t....
그건 틀렸어. 이 정의의 경우 :
int i = 10; int j = 20;
j
를 만들 규칙은 없다i
에 인접한 메모리 위치에 저장 .int
에 대한 포인터 증가 다른int
에 대한 포인터를 얻으려면 바로 다음에 정의 된 규칙은 그러한 규칙 중 하나가 아닙니다! 하드웨어 메모리에 두 개의 정수가 인접한 메모리에 저장 되어도i
에 대한 포인터가 증가한다는 점에 유의하십시오. 그리고 그것을 역 참조하는 것은 정의되지 않은 행동입니다. - 답변 # 3
++
연산자는 메모리에서 다음 변수가 아닌 다음 위치를 가리 킵니다.int i[2] = {10, 20};
가 있다면 다음p++
i[1]
를 가리킬 것입니다 즉,20
- 답변 # 4
인접한 메모리 위치를 원한다면 배열을 선언해야합니다. 데이터 유형이 작기 때문에 libc가 위치를 할당합니다. 포인터는 선언 된 변수 주위의 공간을 차지합니다.
관련 자료
- constants - C에서 const 정규화 된 함수 포인터의 동작
- c - 포인터와 곱셈 연산자를 사용하는 방법?
- linux - 리디렉션 연산자를 사용하는 Bash 명령 "읽기"동작
- 이것은 PHP null 통합 연산자 또는 예상되는 동작의 버그입니까?
- 누군가 R에서`<<-`할당 연산자의 동작을 설명 할 수 있습니까?
- c++ - 포인터와 벡터를 사용할 때 "*"오류와 일치하는 연산자가 없습니다
- c# - 제네릭 형식 값과 'default'키워드에 대한 '=='연산자의 동작은 무엇입니까?
- rx java - RxJava flatMap 연산자의 모호한 동작
- syntax error - 문자 배열에서 Kotlin 스프레드 연산자 동작
- c - sizeof 연산자를 사용할 때 예기치 않은 동작
- inheritance - C ++에서 operator =의 이상한 동작
관련 질문
- c++ : 동적으로 할당된 배열의 모든 요소를 제거하는 방법은 무엇입니까?
- c++ : 이 두 지역 변수의 주소가 같은 이유는 무엇입니까?
- c++ : 클래스의 멤버 구조체는 기본에 잘못된 속성 값을 인쇄하지만 메모리에는 올바른 값을 가지고 있습니다.
- c++ : DLL 경계에 걸친 엄격한 앨리어싱
- c++ : constexpr std:: constexpr 변수에 대한 포인터 배열의 MSVC 오류(다른 컴파일러는 그렇지 않음)
- c++ : 재귀 포인터가 예상대로 작동하지 않음
- c++ : 생성자 함수와 포인터
- C++ 라이브러리와 프레임워크가 스마트 포인터를 사용하지 않는 이유는 무엇입니까?
- C++ 복사 생성자의 포인터
- 특정 메모리 주소에 새 C++ 개체를 만드시겠습니까?
코드의 동작은정의되지 않음입니다.
포인터 산술은 배열 내에서만 유효합니다. 다른 객체에 대한 포인터를 늘리고 해당 포인터를 역 참조하여 객체에 액세스 할 수 없습니다. 좀 더 자세하게,
p++
가 정의되어 있지만 (객체를 단일 요소 배열로 간주 할 수 있으며 배열 끝을 지나서 포인터를 설정할 수 있음) 후속 역 참조는 정의되지 않습니다.