void指针和数组指针之间的转换
由于void* 可以被任何指针赋值,所以以void*作为函数参数可以使得接口更容易接受不同类型的参数,不过需要注意的时,实际操作时还需要利用强制类型转换,将指针转换为原类型,否则在内存上会有问题。
一般情况下void*不支持解引用,同样不支持运算。(因为无法清楚知道所指地址的对象占用了多大的内存)
以下为数组指针的一些总结(T可参考int)
表达式 | a指针指向 | 解释 | 维数 | 数组中元素类型 |
---|---|---|---|---|
T* a; | T* | 指向整数的指针 | 1维 | 整数指针 |
T a[m]; | T(*) | 指向整数数组头 | m维 | 整数 |
T* a[m]; | T* (*) | 指向整数的指针数组 | m维 | 指针->整数 |
T a[m][n] | T(*)[n] | 指向整数数组的指针数组 | m维 | 指针->整数数组 |
下面考虑函数调用void*参数再转化为数组指针的几个例子:
#include <iostream>
using namespace std;
int f1(void* arg){
int* a1=(int*)arg;
return *a1;
}
int f2(void* arg){
int* b1=(int *)b1;
return b1[0];
}
int f3(void* arg){
int** d1=(int **)arg;
return *d1[0];
}
int f4(void* arg){
int(*c)[2]=(int(*)[2])arg;
return c[0][0];
}
int main(int arg,char* argv[]){
int a=1;
int e=5;
int b[2]={1,2};
int* d[2]={&a,&e};
int c[2][2]={1,2,3,4};
cout<<f1(&a)<<"\n"<<f2(b)<<"\n"<<f3(d)<<"\n"
<<f4(c)<<endl;
return 0;
}
//最后的输出为1,9,5,4
void指针和数组指针之间的转换的更多相关文章
- C++中的指针、数组指针与指针数组、函数指针与指针函数
C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从刚開始学习的人的角度,深入浅出地具体解释什么是指针.怎样使用指针.怎样定义指针.怎样定义数组指针和函数指针.并给出相应的实例演示.接着,差 ...
- (60) 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用
#include<stdio.h> #include<iostream> #include<malloc.h> /* author : 吴永聪 program: 结 ...
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题
这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...
- c语言,指针与数组--指针与二维数组2
指向一维数组的指针 char (*p)[10] ;指向一维数组的指针类型 typedef char(*TYPE_P2ARRAY)[10] ; 该指针可以指向数组 ,且使用起来效果节本相同, ...
- (0)c++入门——认识指针与数组——指针即是内存中地址。
初识指针 首先需要了解一个概念,计算机的内存(或者说是寄存器)都是有地址的. <c++ primer plus>一书P37中提到这样一个概念:为把信息存储在计算机中,程序必须记录3个基本属 ...
- C专家编程之为什么C语言把数组形參当做指针:数组/指针实參
#include<stdio.h> void print_array_test(char ca[]) { printf("ca : %s\n",ca); printf( ...
- 序列化之对象,字符串,byte数组,XML之间的转换(一)
工作一年多了,越来越感到自己不能这样一直下去,在最好的青春里面却已经死了.被时间消磨了意志,被工作杀死了精神.我想,我只要活着,我就要去不断的要求自己,不断的去追求更高的山峰. 放眼四周,有趣的灵魂越 ...
- php 数组对象之间的转换
在之前我写过php返回json数据简单实例 从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码. 一.json_encode() 1 ...
随机推荐
- python反转链表和成对反转
https://www.cnblogs.com/tianqizhi/p/9673894.html https://blog.csdn.net/weixin_34168700/article/detai ...
- pycharm中进行全局搜索
- shortcuts 快捷键
Home » Linux » shortcuts 快捷键 Page Updated 2018-12-12 19:23 shortcuts 快捷键 移动光标 Ctrl – a :移到行首 Ctrl – ...
- Centos7上查看ext4文件系统的实际创建时间
前提:今日查看nginx日志时发现有报错,说是一些js,css文件找不到,于是想到去实际路径下查看文件是否确实不存在.结果出现下图中报错: 经过别人提醒查看文件的时间,于是看了一下登上服务器是9:52 ...
- Python获取内网IP
Python 获取本机内网IP 本文记录使用Python获取本机IP的两种方法. 通过hostname来获取本机IP import socket print(socket.gethostbyname( ...
- DBFlow框架的学习笔记之入门
什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...
- u-boot的环境变量详解
u-boot的环境变量 u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot自己定义的,更改这些名字会出现错 ...
- Docker Swarm和Kubernetes在大规模集群中的性能比较
Contents 这篇文章主要针对Docker Swarm和Kubernetes在大规模部署的条件下的3个问题展开讨论.在大规模部署下,它们的性能如何?它们是否可以被批量操作?需要采取何种措施来支持他 ...
- tfgan折腾笔记(二):核心函数详述——gan_model族
定义model的函数有: 1.gan_model 函数原型: def gan_model( # Lambdas defining models. generator_fn, discriminator ...
- .Net Core 使用jenkins 部署到远程服务器docker
最近一直在研究docker和kubernetes,小型的项目其实也用不到k8s,本文就是描述如何用jenkins 进行构建asp.net core 3.1项目并且发布到远程服务器docker容器中.本 ...