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类型数据到文件
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 *指针
的类型多么复杂,比如一个特别大的结构体,它的指针和一个 char型指针的大小本质上是一样的,因为指针就是起始地址。 正式由于这个原因,(void
发表于 08-20 08:30
C语言指针必须要进行强制类型转换?
char c=255;[C] 纯文本查看 复制代码 pc=&c;[C] 纯文本查看 复制代码 pi=&i; pc=(char *)pi;//疑问处}既然所有
发表于 03-06 04:14
STM32编程:void指针高阶用法举例,设计一个通用掉电存储子系统
一般被称为通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针是void型
发表于 12-27 18:47
•10次下载
一文揭秘C语言的void指针
void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“
PLC指针类型与间接寻址详解
在西门子S7-300和S7-400的编程中经常需要调用一些系统功能或功能块,在输入参数时经常碰到有指针类型的参数,那么你对指针类型了解吗?我第一次接触
什么是C语言(void*)类型
大家在C语言的学习过程中肯定见过各种指针符号,如 int*, char* 等等等等。顾名思义,int*就是一个指向整形的指针,而char*则是一个指向字符的
评论