가 있는 경우에는 무효의 포인터,나는 어떻게를 넣어 int 다.
-
19-09-2019 - |
문제
나의 배열을 가지고 임의의 값 그래서 저는 정의로 배열의 무효의 포인터,할 수 있도록 포인트를 어떤 종류의 정보( 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]);
나중에.
제휴하지 않습니다 StackOverflow