06-9 C语言中void类型指针的作用
2018-03-14 08:35
211 查看
1、void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。
因此void*只能表示一个地址,不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位2、void *就是一个不能动的“地址”,在进行&、移动指针之前必须转型为类型指针3、void *的用途:在只知道内存,但是不知道是什么类型的时候。例子:21ptrVoid.c
#include <stdio.h>
/****************************************************************/
/* */
/* 本程序主要介绍void类型指针的定义及使用方法 */
/* */
/****************************************************************/
//void 定义类型的指针表示一段内存的地址,但是不知道是什么类型的数据,
//定义时不能用不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位
//因为不知道是具体什么类型,如果移动指针时不知道要移动几个字节,所以不能移动。
int main(int argc, char *argv[])
{
int nums[] = {3,5,6,7,9};
void* ptr1 = nums;
//int i = *ptr1; //这样去指针指向内存的值的方法无法调用并编译通过
int* ptr2 = (int*)nums; //将其转换为类型指针
printf("%d,%d\n",ptr1,ptr2);
int i = *ptr2;
printf("%d\n",i);
return 0;
}
22ptrVoidStruct.c#include <stdio.h>
#include <string.h>
/****************************************************************/
/* */
/* 本程序主要介绍void类型指针,在结构体和方法中的传入传出应用 */
/* 并自己写一个memset()函数,体验void类型指针的使用方法 */
/* */
/****************************************************************/
typedef struct _Person
{
char *name;
int age;
} Person;
void zeromem(void *data,int byteSize)
{
//char就是一个字节,而计算机中是以字节为单位
char* ptr = (char*)data;
int i;
for(i=0;i<byteSize;i++)
{
*ptr = 0;
ptr++; //因为ptr是char指针,所以为逐字节移动
}
}
int main(int argc, char *argv[])
{
int nums[20];
/*
memset(nums,0,sizeof(nums)); //memset()函数可以初始化各种类型的数组
//但在函数应用时传入的参数并不知道是哪
//种类型指针,因此在函数的定义中,第一
//个参数可以定义为void类型指针,以完成对
//各种类型数组的初始化
char chs[2];
memset(chs,0,sizeof(chs));
*/
zeromem(nums,sizeof(nums));
int i;
for(i=0;i<sizeof(nums)/sizeof(int);i++)
{
printf("%d|",nums[i]);
}
Person p1;
zeromem(&p1,sizeof(Person));//传入时是p1的地址
printf("\n%d\n",p1.age);
return 0;
}课程中老师布置任务为写一个自己的memcpy,今天没有成功
因此void*只能表示一个地址,不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位2、void *就是一个不能动的“地址”,在进行&、移动指针之前必须转型为类型指针3、void *的用途:在只知道内存,但是不知道是什么类型的时候。例子:21ptrVoid.c
#include <stdio.h>
/****************************************************************/
/* */
/* 本程序主要介绍void类型指针的定义及使用方法 */
/* */
/****************************************************************/
//void 定义类型的指针表示一段内存的地址,但是不知道是什么类型的数据,
//定义时不能用不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位
//因为不知道是具体什么类型,如果移动指针时不知道要移动几个字节,所以不能移动。
int main(int argc, char *argv[])
{
int nums[] = {3,5,6,7,9};
void* ptr1 = nums;
//int i = *ptr1; //这样去指针指向内存的值的方法无法调用并编译通过
int* ptr2 = (int*)nums; //将其转换为类型指针
printf("%d,%d\n",ptr1,ptr2);
int i = *ptr2;
printf("%d\n",i);
return 0;
}
22ptrVoidStruct.c#include <stdio.h>
#include <string.h>
/****************************************************************/
/* */
/* 本程序主要介绍void类型指针,在结构体和方法中的传入传出应用 */
/* 并自己写一个memset()函数,体验void类型指针的使用方法 */
/* */
/****************************************************************/
typedef struct _Person
{
char *name;
int age;
} Person;
void zeromem(void *data,int byteSize)
{
//char就是一个字节,而计算机中是以字节为单位
char* ptr = (char*)data;
int i;
for(i=0;i<byteSize;i++)
{
*ptr = 0;
ptr++; //因为ptr是char指针,所以为逐字节移动
}
}
int main(int argc, char *argv[])
{
int nums[20];
/*
memset(nums,0,sizeof(nums)); //memset()函数可以初始化各种类型的数组
//但在函数应用时传入的参数并不知道是哪
//种类型指针,因此在函数的定义中,第一
//个参数可以定义为void类型指针,以完成对
//各种类型数组的初始化
char chs[2];
memset(chs,0,sizeof(chs));
*/
zeromem(nums,sizeof(nums));
int i;
for(i=0;i<sizeof(nums)/sizeof(int);i++)
{
printf("%d|",nums[i]);
}
Person p1;
zeromem(&p1,sizeof(Person));//传入时是p1的地址
printf("\n%d\n",p1.age);
return 0;
}课程中老师布置任务为写一个自己的memcpy,今天没有成功
相关文章推荐
- C语言中的void 和void 指针类型
- C语言利用 void 类型指针实现面向对象类概念与抽象。
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C语言中的void 和void 指针类型
- Void类型的指针-C语言
- C语言--无类型指针void*的学习与使用
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- C语言之void类型及void指针 分类: C/C++ 2015-07-13 11:24 8人阅读 评论(0) 收藏
- C语言之void类型及void指针
- C语言中的void 和void 指针类型
- C语言void指针的运算操作[小知识]
- C语言的指针类型详细解析
- 【C语言】测试不同类型的指针的算术运算
- 【3-1-28】void类型指针和空指针详解
- 如何获取变量类型及void指针中保存的指针指向什么类型的变量
- C语言泛型指针应用-为任何类型的变量交换值
- 5. 06 C语言 指针
- C语言void及void指针深层探索
- python利用ctypes的指针传入int型列表和string类型列表到c语言中
- 关于c语言和C++中void和void*指针解析