문제

나의 배열을 가지고 임의의 값 그래서 저는 정의로 배열의 무효의 포인터,할 수 있도록 포인트를 어떤 종류의 정보( int, 문자 배열,etc.).그러나,어떻게 실제로 할당 int 나요?

예를 들어 이러한 초기화:

void* data[10];
int x = 100;

나의 직관이 생각하는 것입이지만,이렇게 컴파일러:

data[0] = malloc(sizeof(int));
*(data[0]) = x;

또한 나를 사용하는 방법에 대해 생각해 &x, 지만,나는 주소를 가지고 지역 변수의하는(내 이해)것을 삭제한 후에서 종료합니다.그렇다면 내가 지역 변수 x, 어떻게 그것을 얻으로 무효가 포인터 타입의 변수가 제대로 하고 있습니까?

도움이 되었습니까?

해결책

*((int*)data[0])=x;

할 것입니다.

노조 사용을 고려할 수 있습니다. 이 같은:

union myvalues
{
    int i;
    double d;
    long l;
};

그러면 가질 수 있습니다

union myvalues *foo[10];
foo[0] = malloc(sizeof(union myvalues));
foo[0]->i = x;

당신은 또한 수 typedef 노조. sizeof(union myvalues) 최대 값이 될 것입니다 sizeof 회원. 그래서 당신이 있다면 int i; 그리고 char c[40] 노조에서 sizeof(union myvalues) 40 세가 될 것입니다 i 그런 다음 처음 4자를 덮어 씁니다 c (int가 4 바이트라고 가정합니다).

다른 팁

*((int *)data[0]) = x;

X 사본이 만들어 지므로 로컬 변수라는 사실은 중요하지 않습니다.

에 대한 별칭 이유 그 훨씬 더 낫지

mempcy( data[0], &x, sizeof( int ) );

으로 일어나는 컴파일러 최적화 memcpy 를 호출로 sizeof(int)상수 값만 끊기지 않은 다양한싱 규칙이 있습니다.

캐스트를 사용하여 과제를 만들 수는 있지만 다음과 같은 코드를 작성하는 것이 훨씬 더 깨끗 할 것입니다.

void *data[ 10 ];
int x = 100;
int *p;

p = malloc( sizeof *p );
data[ 0 ] = p;
*p = x;

이 시도:

data[0] = malloc(sizeof(int));
*((int*)data[0]) = x;

또는

(int) (*(data[0])) = x;

잊지 마세요

free (data[0]);

나중에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top