由于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指针和数组指针之间的转换的更多相关文章

  1. C++中的指针、数组指针与指针数组、函数指针与指针函数

    C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从刚開始学习的人的角度,深入浅出地具体解释什么是指针.怎样使用指针.怎样定义指针.怎样定义数组指针和函数指针.并给出相应的实例演示.接着,差 ...

  2. (60) 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用

    #include<stdio.h> #include<iostream> #include<malloc.h> /* author : 吴永聪 program: 结 ...

  3. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  4. 做筛选遍历时遇到的json字符串、json对象、json数组 三者之间的转换问题

    这个是后台对登录用户以及筛选条件的操作 @Override public List<SdSdPer> listResults(String sidx, String sord) { try ...

  5. c语言,指针与数组--指针与二维数组2

    指向一维数组的指针   char (*p)[10] ;指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   该指针可以指向数组 ,且使用起来效果节本相同, ...

  6. (0)c++入门——认识指针与数组——指针即是内存中地址。

    初识指针 首先需要了解一个概念,计算机的内存(或者说是寄存器)都是有地址的. <c++ primer plus>一书P37中提到这样一个概念:为把信息存储在计算机中,程序必须记录3个基本属 ...

  7. C专家编程之为什么C语言把数组形參当做指针:数组/指针实參

    #include<stdio.h> void print_array_test(char ca[]) { printf("ca : %s\n",ca); printf( ...

  8. 序列化之对象,字符串,byte数组,XML之间的转换(一)

    工作一年多了,越来越感到自己不能这样一直下去,在最好的青春里面却已经死了.被时间消磨了意志,被工作杀死了精神.我想,我只要活着,我就要去不断的要求自己,不断的去追求更高的山峰. 放眼四周,有趣的灵魂越 ...

  9. php 数组对象之间的转换

    在之前我写过php返回json数据简单实例 从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码. 一.json_encode() 1 ...

随机推荐

  1. node.js 和 npm/cnpm/nrm 的安装

    node.js 和 npm/cnpm/nrm 的安装 安装 node.js.去 官网 下载,下载 LTS 版本的.安装时一路点确定,不要改动任何设置. 在 git-bash 或是 cmd 下,输入 n ...

  2. LG_2286_[HNOI2004]宠物收养场

    题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

  3. CIA Hive Beacon Infrastructure复现1——使用Apache mod_rewrite实现http流量分发

    0x00 前言 2017年11月9日维基解密公布一个代号为Vault8的文档,包含服务器远程控制工具Hive的源代码和开发文档.开发文档中的框架图显示Hive支持流量分发功能,若流量有效,转发至Hon ...

  4. 通过ELK快速搭建集中化日志平台

    ELK就是ElasticSearch + LogStash + Kibana 1.准备工作 ELK下载:https://www.elastic.co/downloads/ jdk version:1. ...

  5. PHP 全局使用 Laravel 辅助函数 dd

    dump() 方法 全局 composer.json 12345 "require": { "squizlabs/php_codesniffer": " ...

  6. [Gem] AASM 狀態機

    @(Ruby on Rails)[rails, gem] 1234 # AASM is a continuation of the acts-as-state-machine rails plugin ...

  7. markdoen语法

    # 标题1 ## 标题2 ### 标题3 #### 标题4 ##### 标题5 ###### 标题6 1. 有序列表1 2. 有序列表2 <!--more--> + 无序列表 * 无序列表 ...

  8. celery beat之pidfile already exists问题

    背景 在进行celery定时任务测试时,发现到点任务并未执行,检查了log发现在启动celery beat的时候有这样一个报错,所以celery beat并未启动成功. 1234 (hzinfo) E ...

  9. Webpack 常用 modules

    @(Javascript)[webpack] babel babel-core: babel 核心程式,知道如何載入程式碼.解析和輸出檔案(但不包含編譯). babel-loader: 用來告訴 ba ...

  10. Python——8函数式编程①

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...