#include<stdio.h>
int main(void){
int a[3] = {1,2,3};
int *p;
p = &a+2;
// here p and &a+2 will going to be same...having some particular address on memory
*p = 56;
// m writing 56 on *(p) or *(&a+2)...
printf("%d %d\n",*p,*(&a+2));
return 0;
}
o/p는 내가 무엇인지 보여줍니다 !! *p = 56
하지만 *(&a+2)
= 같은 &a+2
로 ... p = &a+1
것이 나에게 스매싱 스택을주고gcc의 포인터를 사용하여 수동 위치에 값을 저장하는 동안 오류가 발생했습니다.
...
이 사람이 나에게 설명 할 수 나에게 원하는 결과 56
을 제공 *(*(&a+2))
에
... 무엇을 이것의 정확한 이유는 무엇입니까?
예상되는 출력과 실제로 출력 한 것이 분명하지 않습니다. [mcve]를 제공하여이를 분명히하십시오. – hnefatl
컴파일러 경고에주의하십시오 : https://ideone.com/vOCpGK. 이 코드는 정의되지 않은 동작을 호출합니다. –
* pi는 56이고 p는 약간의 주소입니다 ... 그래서 56이 * 56 주소를 가지고 있어야합니다. (& a + 2) 주소 값을 얻었습니다 ... printf 명령문에 56이 있습니다. , 일부 주소 ... 대신 56,56 – Rucha