当前位置: 首页 > article >正文

C语言指针高级部分:void指针和数据指针

概念

  1. void指针
  2. 数据指针
void指针

void指针的基本概念

void的意思就是“无类型”,void指针则为“无类型指针”,void指针可以指向任何类型的数据。
所以void指针一般被称为通用指针或者泛指针,或者叫做万能指针

定义形式 :
void *p;

**在C语言中在任何时候都可以用void类型的指针来代替其他类型的指针,void指针可以指向任何数据类型的变量**
**如果要通过void指针去获取它所指向的变量值时候,需要先将void指针强制类型转换成和变量名类型想匹配的数据类型指针后再进行操作;**
指针的强类类型转化:void  *p;int *pa = (int *)p;然后才能对原来的void指针指向的空间进行操作
任何类型的指针都可以赋值给void指针,无需进行强制类型转换;float f = 1.22f;float *p1 = &f;p = p1;//将float指针赋值被p

void指针的应用场合:
当进行纯粹的内存操作的时候,或者传递一个指向未定类型的指针时,可以使用void指针;
void* memcpy(void *addr1,void *addr2,size_t n);
该函数只进行纯粹的内存拷贝,包括NULL字符在内的任何内容都将被拷贝

1:对函数参数的限定
2:对函数返回的限定
3:void指针也常用作函数指针

代码如下所示:

#include<stdio.h>int main(void)
{int num1 = 1;char char1 = 'b';/*定义两个void指针类型*/void *void_pointer_1;void *void_pointer_2;/*给不同的void指针指向不同的数据类型*/void_pointer_1 = &num1;void_pointer_2 = &char1;printf("void_pointer_1:%d,void_pointer_2:%c\n",*((int *)void_pointer_1),*((char *)void_pointer_2));void_pointer_2 = &num1;printf("void_pointer1:%d\n",*((int *)(void_pointer_2)));float float_1 = 1.25f;float* float_pointer = &float_1;void* void_float_pointer ;/**将float类型指针赋值给void类型指针*/void_float_pointer = float_pointer;printf("float_pointer:%f\n",*((float *)void_float_pointer));return 0;
}
数据指针

数据指针的概念:
在嵌入式编程当中,可能在特定的内存但愿读写内容,汇编有对应的MOV命令,而除了C/C++以外的编程语言基本上没有直接访问内存的能力
利用数据指针可直接 通过内存地址操作特定的内存

如:在地址0XFF00FF00对应的内存但愿中写入11
unsigned int *p = (unsigned int *)0XFF00FF00;
*p = 11;

数据指针操作特定的内存的时候一定要谨慎,不是所有内存都可以操作,必须要对硬件比较了解后,才能进行操作(可能会出现段错误)

代码能够run,如果有需要的话,可以直接拉下来run一下,看看结构体数组是怎么进行初始化操作和使用的。谢谢大家的访问,如有写的不好的地方,希望大家能够及时的提出来,谢谢观看

http://www.lryc.cn/news/2419010.html

相关文章:

  • Android一点 打造全功能屏幕适配AutoView
  • 深度解析JavaScript中常见设计模式及其应用场景,看完去面试,面试官说:就你了
  • 安卓期末大作业——安卓手机网上商城-2号店
  • JavaWeb实现简单的文件上传和下载
  • PerformanceCounter 性能计数器的使用
  • 六亿美金到数千万美元,西雅图行业先驱要私有化!
  • 问题解决:com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H'
  • 软件开发完整流程整套文档(开发实施运维安全交付)
  • 超宽屏幕比例_显示器屏幕比例与分辨率对照表
  • C# 设计模式(一)
  • JCreator调试全攻略
  • 基于领域特定语言(DSL)的用例驱动开发(UDD)
  • 【YOLO使用】YOLOv5训练目标检测任务入门用法(一)
  • 文件系统格式FAT16、FAT32、NTFS、exFAT的区别
  • 什么是垂直搜索引擎
  • 【软件基础】面向对象分析与设计思想总结
  • freepascal linux 界面,FreePascal中的编译器选项
  • eclipse安装flash builder 4.7插件以及java、flex整合开发
  • MSF使用教程
  • h3c防火墙u200配置命令_绝了!华为、H3C、锐捷交换机配置命令大全
  • sort函数用法与stable_sort函数
  • 世界华人名人录
  • TypedArray的用法和declare-styleable:自定义控件的属性
  • 【IO】读写文件(FileInputStream、FileOutputStream、FileReader、FileWriter、RandomAccessFile)
  • 网络信息安全等级与标准_比较tcsec,cc及我国信息安全等级保护标准
  • 斗罗大陆武魂觉醒礼包码最新兑换码2024
  • 五笔字根表
  • (虚拟机)win10忘记密码重置_copy sethc,熬夜整理华为最新网络安全笔试题
  • 用移动硬盘当系统盘,即插即用
  • HTML的基本标签II