나는 기능이, void *Client(void *threaData){}
무효 * 입력 함수 매개 변수
당신은 void *threadData
매개 변수에 대해 나에게 몇 가지를 알 수 있습니다. void *
매개 변수를 사용할 때 그 이유는 무엇입니까? 당신이 할 수있는,
나는 기능이, void *Client(void *threaData){}
무효 * 입력 함수 매개 변수
당신은 void *threadData
매개 변수에 대해 나에게 몇 가지를 알 수 있습니다. void *
매개 변수를 사용할 때 그 이유는 무엇입니까? 당신이 할 수있는,
void *
은 모든 개체 유형을 가리킬 수있는 일반 포인터입니다. 위의 함수는 모든 유형의 포인터를 사용할 수 있으며 모든 유형의 포인터를 반환 할 수 있습니다.
사용자가 입력 한 데이터의 데이터 유형이 확실하지 않은 경우 일반 포인터를 사용할 수 있습니다.
예 : -에 대한 포인터를 전달하여 모든 데이터 유형을 인쇄 할 다음 함수는 같은 일반적인 방법으로 함수에 다른 유형을 전달할 수
void funct(void *a, int z)
{
if(z==1)
printf("%d",*(int*)a); // If user inputs 1, then he means the data is an integer and type casting is done accordingly.
else if(z==2)
printf("%c",*(char*)a); // Typecasting for character pointer.
else if(z==3)
printf("%f",*(float*)a); // Typecasting for float pointer
}
당신이 void *Client(void *threadData){}
기능의 정수를 전달하려는 가정, 그래서 당신은
int integer;
integer = SOME_VALUE;
Client(&integer);
및 기능
void *Client(void *threadData)
{
int value;
value = *(int *)threadData;
}
및 void *
이후에
Client()
함수로 전달하십시오.
그리고 데이터의 유형에 대해 사용자 입력을 제공 데이터를 포함한 구조 –
좋은 질문 ('void *을 통해 데이터를 전달하면 엄격한 별칭 규칙을 위반하게됩니까?'). 나는 대답하기 전에 생각해야했다. 나는 그 대답이 "아니오"라고 믿는다. 쓰레드 함수가'void * thread_func (void * pdata) {...}'라고 가정하자. 함수에'struct SomeThing'에 대한 포인터를'void *'로 넘겨 준다고 가정하십시오. 쓰레드 함수 안에서 가장 먼저 할 일은'SomeThing * args = pdata;'(또는'SomeThing arg = * (SomeThing *) pdata;')이다. 그래서 올바른 타입의 포인터를 통해서만 데이터에 접근 할 수있다. aliassed 형식을 통해가 아니라 엄격한 별칭 문제가 없습니다. –
@JonathanLeffler 좋아, 이제는 걱정하지 않을 것이다. 죄송합니다. 답글을 남겨 두어 죄송합니다. 답장을 보내지 않을 것이라고 생각했습니다. –
빠르고 쉬운 대답, 어쩌면 당신은 C 프로그래밍에서 사용되는 예제를 추가 할 수 있습니다. – Rizier123
예, 아주 좋은 대답입니다. 나는 예를 기다릴 것이다 : D. – Rapidistul
'void *'는 어떤 포인터 유형을 가리킬 수 없지만 사실 어떤 객체 유형이든 가리킬 수 있습니다. 그러나 함수는 어떤 유형의 포인터도 가질 수 없으며, 포인터와 객체 유형에 대한 포인터 만 무효화합니다 (함수 포인터는 제외). –