0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言-void类型作为万能指针类型

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-08-14 10:04 次阅读

1. 前言

void类型在基本数据类型里是空类型无类型;

void类型常用来当做函数的返回值,函数形参声明,表示函数没有返回值,没有形参。

void类型不能用来定义变量,因为它是空类型–可以理解为空类型

void abc;  //这是错误的

但是void是可以定义指针的,void*表示万能型指针类型,可以与任何指针类型进行转换,特别是内存拷贝里用的很多。

2. 内存拷贝函数 memcpy

系统提供函数: 内存拷贝函数

#include 
void *memcpy(void *dest, const void *src, size_t n);

**示例代码:**memcpy函数过程

#include 
#include 
#include 

int main(int argc,char **argv)
{
	char str1[]="1234567890";
	char str2[100];
	int int_a[]={1,2,3,4,5,6,7,8,9,0};
	int int_b[10];
	int a=200;
	int b;
	int i;
	//拷贝字符串数组
	memcpy(str2,str1,sizeof(str1));
	printf("str1=%s\n",str1);
	printf("str2=%s\n",str2);
	//拷贝整数数组
	memcpy(int_b,int_a,sizeof(int_a));
	for(i=0;i<10;i++)
	{
		printf("%d ",int_a[i]);
	}
	printf("\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",int_b[i]);
	}
	printf("\n");
	//拷贝变量
	memcpy(&b,&a,sizeof(a));
	printf("a=%d\n",a);
	printf("b=%d\n",b);
	
	return 0;
}

3. 自己编写memcpy函数

#include 
#include 
#include 
void my_memcpy(void *p1,const void *p2,int cnt);
int main(int argc,char **argv)
{
	char str1[]="1234567890";
	char str2[100];
	int int_a[]={1,2,3,4,5,6,7,8,9,0};
	int int_b[10];
	int a=200;
	int b;
	int i;
	//拷贝字符串数组
	my_memcpy(str2,str1,sizeof(str1));
	printf("str1=%s\n",str1);
	printf("str2=%s\n",str2);
	//拷贝整数数组
	my_memcpy(int_b,int_a,sizeof(int_a));
	for(i=0;i<10;i++)
	{
		printf("%d ",int_a[i]);
	}
	printf("\n");
	for(i=0;i<10;i++)
	{
		printf("%d ",int_b[i]);
	}
	printf("\n");
	//拷贝变量
	my_memcpy(&b,&a,sizeof(a));
	printf("a=%d\n",a);
	printf("b=%d\n",b);
	return 0;
}

/*
内存拷贝函数
*/
void my_memcpy(void *p1,const void *p2,int cnt)
{
	char *str1=(char*)p1;
	char *str2=(char*)p2;
	int i;
	for(i=0;i;i++)>

4. 内存初始化函数: memset

memset函数常用于内存空间初始化,可以给空间赋初始值。

#include 
//void *memset(void *s, int c, size_t n);
//函数功能: 将指定空间赋值为指定的值。

#include 
#include 
#include 
int main(int argc,char **argv)
{
	int int_b[10];
	int b;
	int i;
    //memset(void *s, int c, size_t n);
	memset(int_b,0,sizeof(int_b));
	//拷贝整数数组
	for(i=0;i<10;i++)
	{
		printf("%d ",int_b[i]);
	}
	printf("\n");
	//拷贝变量
	memset(&b,0,sizeof(int_b));
	printf("b=%d\n",b);
	return 0;
}

5. 自己编写memset

#include 
#include 
#include 
void my_memset(void *p,int c,int n);
int main(int argc,char **argv)
{
	int int_b[10];
	int b;
	int i;
    //memset(void *s, int c, size_t n);
	my_memset(int_b,0,sizeof(int_b));
	//拷贝整数数组
	for(i=0;i<10;i++)
	{
		printf("%d ",int_b[i]);
	}
	printf("\n");
	//拷贝变量
	my_memset(&b,0,sizeof(int_b));
	printf("b=%d\n",b);
	return 0;
}

void my_memset(void *p,int c,int n)
{
	char *str=(char*)p;
	int i;
	for(i=0;i;i++)>

6. 读写int类型数据到文件

在文件读写中,经常需要向文件里读写自定义数据。

#include 
#include 
int write_file();
int read_file();

int main(int argc,char **argv)
{
    write_file();
    read_file();
    return 0;
}

int write_file()
{
    int cnt;
    int a=123;
    /*1. 打开文件*/
    FILE *fp=fopen("test.txt","wb");
    if(fp==NULL)
    {
        printf("文件打开失败.\n");
        return -1;
    }
    /*2. 写入数据*/
    cnt=fwrite(&a,1,sizeof(a),fp);
    printf("成功写入%d字节",cnt);
    /*3. 关闭文件*/
    fclose(fp);
    return 0;
}

int read_file()
{
    int cnt;
    int a;
    /*1. 打开文件*/
    FILE *fp=fopen("test.txt","rb");
    if(fp==NULL)
    {
        printf("文件打开失败.\n");
        return -1;
    }
    /*2. 读取数据*/
    cnt=fread(&a,1,sizeof(a),fp);
    printf("成功读取%d字节\n",cnt);
    printf("a=%d\n",a);

    /*3. 关闭文件*/
    fclose(fp);
    return 0;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136692
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70551
  • void
    +关注

    关注

    0

    文章

    23

    浏览量

    9866
收藏 人收藏

    评论

    相关推荐

    void指针简述

    为何在这里单独提到空指针类型呢?主要是因为该指针类型很特殊。void类型很容易让人想到是空的意思
    的头像 发表于 09-09 08:57 1690次阅读
    <b class='flag-5'>void</b><b class='flag-5'>指针</b>简述

    C语言void指针的基本认识及典型应用

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大
    发表于 02-01 09:26 1097次阅读

    C语言中数据类型介绍(基本类型、构造类型指针类型、空类型

    C语言数据类型包括:基本类型、构造类型指针类型、空
    发表于 07-19 09:09

    【设计技巧】指针的使用注意事项:空指针指针赋值、void *指针

    类型多么复杂,比如一个特别大的结构体,它的指针和一个 char型指针的大小本质上是一样的,因为指针就是起始地址。 正式由于这个原因,(void
    发表于 08-20 08:30

    C语言指针必须要进行强制类型转换?

    char c=255;[C] 纯文本查看 复制代码 pc=&c;[C] 纯文本查看 复制代码 pi=&i; pc=(char *)pi;//疑问处}既然所有
    发表于 03-06 04:14

    c语言指针详解

    1.指针简介 指针C语言中广泛使用的一种数据类型。 运用指针编程是
    发表于 03-26 09:51

    什么是void指针void指针有何功能

    一般被称为通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针void
    发表于 02-21 06:01

    C语言voidvoid指针深层探索

    1.概述 本文将对void关键字的深刻含义进行解说,并详述voidvoid指针类型的使用方法与技巧。 2.
    发表于 09-21 11:36 166次下载

    C语言指针电子教程

    本资料是一份不错的关于C语言指针的电子教程,希望对大家有所帮助... 指针简介 指针C
    发表于 07-30 16:00 77次下载

    浅谈void指针的高阶用法

    通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针void
    的头像 发表于 08-09 15:54 1636次阅读
    浅谈<b class='flag-5'>void</b> 型<b class='flag-5'>指针</b>的高阶用法

    STM32编程:void指针高阶用法举例,设计一个通用掉电存储子系统

    一般被称为通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针void
    发表于 12-27 18:47 10次下载
    STM32编程:<b class='flag-5'>void</b><b class='flag-5'>指针</b>高阶用法举例,设计一个通用掉电存储子系统

    一文揭秘C语言void指针

    void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“
    的头像 发表于 02-02 17:18 1572次阅读

    PLC指针类型与间接寻址详解

    在西门子S7-300和S7-400的编程中经常需要调用一些系统功能或功能块,在输入参数时经常碰到有指针类型的参数,那么你对指针类型了解吗?我第一次接触
    的头像 发表于 02-03 11:23 2390次阅读

    什么是void指针

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大
    的头像 发表于 02-13 15:02 1374次阅读

    什么是C语言void*)类型

    大家在C语言的学习过程中肯定见过各种指针符号,如 int*, char* 等等等等。顾名思义,int*就是一个指向整形的指针,而char*则是一个指向字符的
    的头像 发表于 02-24 14:31 3256次阅读