English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
حتى الآن، لقد درسنا أن عنوان التخصيص للpointer يجب أن يكون متساويًا لنوع التخصيص المحدد في إعلان pointer. على سبيل المثال، إذا قمنا بتحديد pointer int، فإن هذا pointer int لا يمكنه التوجه إلى متغير float أو نوع بيانات آخر، أي أنه يمكنه التوجه فقط إلى متغيرات نوع int. للتحكم في هذا المشكلة، نستخدم pointer void. pointer void هو pointer عام يمكنه التوجه إلى أي نوع بيانات. يمكننا تخصيص عنوان أي نوع بيانات لpointer void، ويمكننا تخصيص pointer void لأي نوع بيانات، دون القيام بتحويل نوع صريح.
void pointer name;
يقدم لنا ما يلي إعلان pointer void:
void *ptr;
في الإعلان أعلاه، void هو نوع pointer، و 'ptr' هو اسم pointer.
دعونا نرى بعض الأمثلة:
int i=9; // تعيين متغير int. int *p; // إعلان pointer int. float *fp; // إعلان pointer float. void *ptr; // إعلان pointer void. p=fp; // خطأ. fp=&i; // خطأ ptr=p; // صحيح ptr=fp; // صحيح ptr=&i; // صحيح
حجم指针 void في لغة C متساوي حجم指针 النص. شكل تمثيل指针 void مشابه لشكل تمثيل指针 النص. حجم النقطة سيختلف بناءً على المنصة المستخدمة.
让我们看下面的实例:
#includeint main() { void *ptr = NULL; //void 指针 int *p = NULL;// 整型指针 char *cp = NULL;//字符指针 float *fp = NULL;//浮点指针 //void指针的大小 printf("void指针的大小 = %d\n\n",sizeof(ptr)); //整型指针的大小 printf("整型指针的大小 = %d\n\n",sizeof(p)); //字符指针的大小 printf("字符指针的大小 = %d\n\n",sizeof(cp)); //浮点指针的大小 printf("浮点指针的大小 = %d\n\n",sizeof(fp)); return 0; }
نتائج الإخراج
void指针的大小 = 4 整型指针的大小 = 4 字符指针的大小 = 4 浮点指针的大小 = 4
以下是void指针的优点:
malloc()和calloc()函数返回void指针,因此这些函数可用于分配任何数据类型的内存。
#include#include int main() { int a=90; int *x = (int*)malloc(sizeof(int)) ; x=&a; printf("x指针所指向的值 : %d",*x); return 0; }
نتائج الإخراج
x指针所指向的值 : 90
C中的void指针也可以用于实现C中的泛型函数。
由于其可重用性,我们使用void指针。void指针可以存储任何类型的对象,并且我们可以通过使用带有适当类型转换的间接操作符来检索任何类型的对象。
让我们通过一个实例来理解。
#includeint main() { int a=56; //初始化一个整数变量'a'。 float b=4.5; //浮点变量'b'的初始化。 char c='k'; //字符变量'c'的初始化。 void *ptr; //声明空指针。 // 为变量“a”分配地址。 ptr=&a; printf("a的值为 : %d",*((int*)ptr)); //为变量'b'分配地址。 ptr=&b; printf("\nb的值为 : %f",*((float*)ptr)); // تخصيص عنوان المتغير 'c'. ptr=&c; printf("\n قيمة c هي : %c", *((char*)ptr)); return 0; }
نتائج الإخراج
قيمة a هي : 56 قيمة b هي : 4.500000 قيمة c هي : k