이미 저장된 변수에 특정 주소를 어떻게 할당합니까?특정 주소를 변수에 어떻게 할당합니까?
#include <stdio.h>
void main()
{
int a = 10;
printf("%d\n%d\n", a, &a);
&a = 2300000;
}
이미 저장된 변수에 특정 주소를 어떻게 할당합니까?특정 주소를 변수에 어떻게 할당합니까?
#include <stdio.h>
void main()
{
int a = 10;
printf("%d\n%d\n", a, &a);
&a = 2300000;
}
변수의 주소를 변경할 수 없습니다. 컴파일러에는 절대 메모리 주소를 변수에 할당하는 기능이 있습니다. 포인터를 사용하면 일부 주소 만 가리킬 수 있습니다. 마찬가지로
int *p;
p = (int*) 0x00010000;
컴파일러 경고를 피하기 위해 캐스트가 필요하지 않습니까? –
아니요, 변수에 주소를 할당 할 방법이 없습니다. 임의의 위치를 지정할 수 있습니다. 예를 들어 포인터로 주소를 지정할 수 있습니다.
int *ptr;
ptr = (int*)7000;
그러나 특정 주소를 변경하거나 할당하는 것은 불가능합니다.
표시되는 메모리 주소는 실제로 실제 실제 메모리 주소가 아니라 가상 주소입니다. 모든 프로세스는 자체 가상 메모리 공간을받으며 동일한 "주소"를 가진 몇 개의 프로세스에서 변수를 가질 수 있습니다.
따라서 주소 변경은 할 수 없으며 그렇게하는 것도 의미가 없습니다.
unix에서는 posix_memalign을 사용하여 특정 숫자에 맞춰 주소를 할당 할 수 있지만 C가 자동으로 메모리를 정렬하기 때문에 (예 : 구조체의 패딩) 원하는 주소가 될 수 없습니다. 메모리는 2의 거듭 제곱 인 숫자로만 정렬 할 수 있습니다.
1. ['void main()'이 잘못되었습니다.] (http://stackoverflow.com/q/204476/995714). 그것은 비표준 컴파일러의 유물입니다. 2. 주소를 인쇄하려면 ['% p'] (http://stackoverflow.com/q/9053658/995714)를 사용하십시오. 잘못된 형식 지정자를 사용하면 정의되지 않은 동작이 발생합니다. –
@ LưuVĩnhPhúc void main()이 잘못되어서도 안됩니다. 게시 한 링크를 읽으십시오 (예 : Jonathan Leffler 또는 저의 답변). 다른 대부분의 대답은 불완전하거나 너무 단순 해지거나 평범하지 않습니다. – Lundin
@ LưuĩĩnhPhúc main은 구현 정의 될 수 있습니다. 따라서 main void는 유효한 main 함수입니다. 현재 표준을보십시오 : 5.1.2.2.1 프로그램 시작 – 2501