voidおよびvoidポインタの使用法

ボイドの役割

  1. 関数が値を返す必要がない場合の関数の戻りに関する制限
 void fun(int a,int b)
  1. 関数が正式なパラメーターを必要としない場合の関数パラメーターの制限
 int fun(void)

void *ポインタ(型なしポインタ)

  1. ボイドポインタは、任意のタイプのデータを指すことができ、ポインタの任意のタイプは、ボイドポインタに値を割り当てることができる(「なしタイプ」は含まないことができる「と入力」
int *A;
void *p;
p=A;
  1. voidポインターを他のタイプのポインターに割り当てるには、強制的な型変換が必要です(「typed」に「typeless」は含まれません)。
int *A;
void *p;
A=(int *)p;
  1. メモリ割り当て関数の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;

}

おすすめ

転載: blog.csdn.net/weixin_44333597/article/details/107634020