ボイドの役割
- 関数が値を返す必要がない場合の関数の戻りに関する制限
void fun(int a,int b)
- 関数が正式なパラメーターを必要としない場合の関数パラメーターの制限
int fun(void)
void *ポインタ(型なしポインタ)
- ボイドポインタは、任意のタイプのデータを指すことができ、ポインタの任意のタイプは、ボイドポインタに値を割り当てることができる(「なしタイプ」は含まないことができる「と入力」)
int *A;
void *p;
p=A;
- voidポインターを他のタイプのポインターに割り当てるには、強制的な型変換が必要です(「typed」には「typeless」は含まれません)。
int *A;
void *p;
A=(int *)p;
- メモリ割り当て関数のmalloc関数から返されるポインタはvoid *です。mallocを使用する場合は、型変換が必要です。
char *str;
str=(char *) malloc(20)
注:ANSI規格では、p ++やp + 1などのvoidポインターに対する算術演算は許可されていません。
void *は使用法を指します
変数を指す
文字列を指す
#include <stdio.h>
int main()
{
char *b="abcdefg";
void *p=b;
printf("%s \r\n",(char*)p); //转换不转换为 char* 均可以,打印指针指向的字符串无需解引用
// printf("%s \r\n",p);
printf("%c \r\n", *(char*)p); //打印单个字符 需要转换并解引用
}
#include <stdio.h>
int main()
{
char b[]="abcdefg";
void *p=b;
printf("%s \r\n",(char*)p); //转换不转换为 char* 均可以,打印指针指向的字符串无需解引用
// printf("%s \r\n",p);
printf("%c \r\n",*(char *)p);
}
構造を指す
#include <stdio.h>
#include <string.h>
typedef struct{
char name[10];
int age;
}student;
int main()
{
student per;
void *p;
strcpy(per.name,"ZhangLi");
per.age=22;
p=&per; //指向结构体
printf("%s %d\r\n",((student*)p)->name,((student*)p)->age); //类型转换
return 0;
}