#include <stdio.h>
void pass(void*);
int main()
{
int x;
x = 10;
pass((void*)x);
return 0;
}
void pass(void* x)
{
int y = (int)x;
printf("%d\n", y);
}
output: 10
моих вопросов из приведенной выше коды ..типа литье целого опорожнить *
, что происходит, когда мы типаж нормальных переменных опорожнить * или любой переменный указатель?
Мы должны передать адрес переменной функции, поскольку в аргументе определения функции указана переменная указателя. Но этот код передает нормальную переменную.
Этот формат следует за программированием linux pthread ... Я программист уровня C. Я компилирую эту программу в компиляторе linux gcc.
«Что произойдет, если typcating normal variable to void * или любая переменная указателя?» Зависит от реализации. Обратите внимание, что не гарантируется, что листинг 'int' to' void * 'и back дает исходное значение (хотя обычно это делает). –
Что вы на самом деле пытаетесь достичь? –
Обычно такой тип литья не вызывает никакой озабоченности, если адреса кодируются с использованием той же длины, что и «тип переменной» ('int' в вашем случае). Но @DanielFischer прав, риск состоит в том, что вы потеряете некоторую информацию, если емкость вашей переменной меньше, чем длина адреса. Таким образом, что-то вроде 'void * ptr1 = a_pointer(); char ptr_c = (char) ptr1; void * ptr2 = (void *) ptr_c; 'приведет к утверждению' ptr1! = ptr2' – Rerito