2016-09-13 5 views
0

이미 저장된 변수에 특정 주소를 어떻게 할당합니까?특정 주소를 변수에 어떻게 할당합니까?

#include <stdio.h> 

void main() 
{ 
    int a = 10; 
    printf("%d\n%d\n", a, &a); 
    &a = 2300000; 
} 
+0

1. ['void main()'이 잘못되었습니다.] (http://stackoverflow.com/q/204476/995714). 그것은 비표준 컴파일러의 유물입니다. 2. 주소를 인쇄하려면 ['% p'] (http://stackoverflow.com/q/9053658/995714)를 사용하십시오. 잘못된 형식 지정자를 사용하면 정의되지 않은 동작이 발생합니다. –

+1

@ LưuVĩnhPhúc void main()이 잘못되어서도 안됩니다. 게시 한 링크를 읽으십시오 (예 : Jonathan Leffler 또는 저의 답변). 다른 대부분의 대답은 불완전하거나 너무 단순 해지거나 평범하지 않습니다. – Lundin

+0

@ LưuĩĩnhPhúc main은 구현 정의 될 수 있습니다. 따라서 main void는 유효한 main 함수입니다. 현재 표준을보십시오 : 5.1.2.2.1 프로그램 시작 – 2501

답변

1

변수의 주소를 변경할 수 없습니다. 컴파일러에는 절대 메모리 주소를 변수에 할당하는 기능이 있습니다. 포인터를 사용하면 일부 주소 만 가리킬 수 있습니다. 마찬가지로

int *p; 
p = (int*) 0x00010000; 
+1

컴파일러 경고를 피하기 위해 캐스트가 필요하지 않습니까? –

1

아니요, 변수에 주소를 할당 할 방법이 없습니다. 임의의 위치를 ​​지정할 수 있습니다. 예를 들어 포인터로 주소를 지정할 수 있습니다.

int *ptr; 
ptr = (int*)7000; 

그러나 특정 주소를 변경하거나 할당하는 것은 불가능합니다.

0

표시되는 메모리 주소는 실제로 실제 실제 메모리 주소가 아니라 가상 주소입니다. 모든 프로세스는 자체 가상 메모리 공간을받으며 동일한 "주소"를 가진 몇 개의 프로세스에서 변수를 가질 수 있습니다.

따라서 주소 변경은 할 수 없으며 그렇게하는 것도 의미가 없습니다.

unix에서는 posix_memalign을 사용하여 특정 숫자에 맞춰 주소를 할당 할 수 있지만 C가 자동으로 메모리를 정렬하기 때문에 (예 : 구조체의 패딩) 원하는 주소가 될 수 없습니다. 메모리는 2의 거듭 제곱 인 숫자로만 정렬 할 수 있습니다.

관련 문제