首页 > 其他分享 >void类型指针

void类型指针

时间:2024-04-05 16:11:21浏览次数:13  
标签:void swap 类型 float1 float2 指针

void类型指针

void 指针是一种特殊的指针,表示为“无类型指针”,。由于 void 指针没有特定的类型,因此它可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换

void    *p1;
int     *p2;

p1 = p2;

但是,将 void 指针赋值给其他类型的指针时,必须进行强制类型转换

void    *p1;
int     *p2;

p2 = (int *)p1;

指针保存的是首地址,指针类型就是告诉指针后面有多少,而void类型的指针可以指向任何类型的数据,就是因为void类型不知道大小,任何类型的数据都能存进去,但是在取出来的时候,需要用强制类型转换告诉void指针取多少数据

void类型指针作为函数参数

用 void 指针作为函数的形参,这样函数就可以接受任意数据类型的指针作为参数,可以提高代码的复用性。

例如我们数据库的相关操作并不关心数据本身的类型,直接传void类型的数据,这样可以在不同项目中使用同一套代码,只需要在取出这个数据时强制转换成我们需要的类型。

#include <stdio.h>

void swap(void *a, void *b, size_t size)
{
    unsigned char *x = (unsigned char *)a;
    unsigned char *y = (unsigned char *)b;
    unsigned char temp;

    for (size_t i = 0; i < size; i++) {
        temp = x[i];
        x[i] = y[i];
        y[i] = temp;
    }
}

int main()
{
    int int1 = 1, int2 = 2;
    float float1 = 1.0, float2 = 2.0;

    printf("Before swap: int1=%d, int2=%d\n", int1, int2);
    swap(&int1, &int2, sizeof(int));
    printf("After swap: int1=%d, int2=%d\n", int1, int2);

    printf("Before swap: float1=%f, float2=%f\n", float1, float2);
    swap(&float1, &float2, sizeof(float));
    printf("After swap: float1=%f, float2=%f\n", float1, float2);

    return 0;
}
Before swap: int1=1, int2=2
After swap: int1=2, int2=1
Before swap: float1=1.000000, float2=2.000000
After swap: float1=2.000000, float2=1.000000
Before swap: c1=abc, c2=123
After swap: c1=123, c2=abc

标签:void,swap,类型,float1,float2,指针
From: https://www.cnblogs.com/LiBlog--/p/18115847

相关文章

  • 实验题集三:指针和引用 所有题
    R7-1冒泡鸿鸿哥最近学习了指针,感觉这个知识点有点难以理解,于是想要通过编程实践来掌握它。鸿鸿哥以前学习数组(第7章)的时候已经掌握了冒泡排序的一般写法,现在他想用指针来实现排序的功能函数。但是他遇到了困难,你能帮帮他吗?指针实现冒泡排序函数,函数名统一用voidbubbleSort(......
  • LeetCode-142. 环形链表 II【哈希表 链表 双指针】
    LeetCode-142.环形链表II【哈希表链表双指针】题目描述:解题思路一:快慢指针判断是否有环见解题思路二:set()解题思路三:0题目描述:给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next......
  • 不同类型数据运算
    Voltage_Output*51如果Voltage_Output是float型数据,运算下来是什么类型整数提升是指当参与表达式计算的操作数中有不同的整数类型时,较低精度的整数类型会被隐式提升为较高精度的整数类型。在这里,整数常量51会被隐式提升为整数(int)类型,而不是字符(char)类型。如果 Voltage_Ou......
  • 什么是数据类型,什么是数据结构。
    数据类型,是人对数据的分类。人用这个信息,人自己或者让编译器做一种运动,将一种形式的数据转换成另一种形式的数据。数据结构,是人认为的数据之间的关系。数据类型是程序设计语言或者编译原理的概念。只讨论数据结构,可以不使用数据类型这个概念,可以不用高级程序设计语言,可以直接用......
  • 10米精度NPP净初级生产力数据/NDVI数据/植被类型数据/土地利用数据
     数据下载链接:百度云下载链接        数据福利是专门为关注小编博客及公众号的朋友定制的,未关注用户不享受免费共享服务,已经被列入黑名单的用户和单位不享受免费共享服务。参与本号发起的数据众筹,向本号捐赠过硬盘以及多次转发、评论的朋友优先享有免费共享服务。净......
  • 深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针
    1、数组名理解首先来看一段代码:intmain(){ intarr[10]={1,2,3,4,5,6,7,8,9,10}; printf("%d\n",sizeof(arr)); return0;}输出的结果是:40,如果arr是数组首元素的地址,那输出应该是4/8才对。其实数组名就是数组首元素(第一个元素)的地址是对的,但是有两个例外:sizeof......
  • JAVA学习-类型信息.Class对象
         Java中的类型信息是通过Class对象来表示和获取的。Class对象是Java中的一种特殊对象,它包含了被表示的类型的信息,如名称、字段、方法、构造函数等。可以通过Class对象来获取和操作类型的相关信息。一、以下是几个常见的获取Class对象的方式:1.使用类名.class语......
  • 3.2 标准库类型string
    3.2标准库类型string标准库类型string代表了一个可变长度的字符序列,是C++中用于处理文本数据的主要方式。为了使用string类型,首先必须包含string头文件:#include<string>usingstd::string;这种类型作为标准库的一部分,被定义在std命名空间中,这意味着你可以使用std::str......
  • golang 接口类型断言失败时,有哪些方式可以优雅地处理panic?
    在Go语言中,接口类型断言失败会导致运行时panic。为了避免程序因为类型断言失败而意外终止,可以采取以下几种优雅处理panic的方法:1.使用recover函数recover函数可以用来捕获panic,并从中恢复。这通常与defer语句一起使用。在进行类型断言的代码块之后,可以添加一......
  • golang反射与接口类型断言有什么区别?
    在Go语言中,反射(Reflection)和接口类型断言(InterfaceTypeAssertion)是两种不同的机制,它们各自有不同的用途和行为。以下是对它们的比较和区别的详细解释。反射(Reflection)反射是一种在运行时检查和操作程序内容的能力。在Go语言中,反射主要通过reflect包来实现。反射使......