文章目录

  • 一、前言
  • 二、正文
    • 1、*带不带空格的区别
    • 2、char*和char**
    • 3、关于指针运算
    • 4、char指针转std::vector<float> 解析
      • (1)const char * 转换成 float *
      • (2)计算字符长度和指针偏移量
      • (3)初始化vector容器
      • (4)std::vector<float> 的() 和 {}
  • 三、后记

一、前言

从一开始写c++,就发现大家的代码里,要么是char* b,要么是char *b,还有char * b这种写法,实在是一言难尽。起初还以为是有什么特别的技巧,后来才发现,呵呵哒。

二、正文

1、*带不带空格的区别

char* b
char *b
char * b
结论:这三种写法是一样的,都表示b是指针类型,指向一个char类型的字符串。建议第二种写法。比如做函数传参:
char* a[] = {"hello world", "liitdar"};
char** b = a;int main(int argc, char ** argv)
int main(int argc, char *argv[])明显看出来写法不一样,这个跟个人编程习惯有关,建议保持一致。

结论是三种写法含义一样,只是编程习惯上的差异!不止是char类型,其他类型指针也是同样的。

2、char*和char**

char a='1' 是一个字符;
char *b=“12345” or char b[]="12345" 是指针指向一个字符串。
char **c 也是指针,指向二维数组.。其同等表达为char *c[], char c[ ][ ]。注意:c++中,数组名在 C 语言中做了特殊处理,数组名使用数组所占用的(连续)
内存区域的第一个字节的内存地址替代了。例如,数组占用的内存区域是
0x7fff5da3f550 到 0x7fff5da3f5a0,那么数组名 a 就会被替换成首地址0x7fff5da3f550;
所以 char *b 和 char b[]才可以互相转换。

3、关于指针运算

参考:[C/C++] 32位系统和64位系统中各个变量类型占的字节数
● 在 32 位系统中,一个指针占用 4 字节(32 位)内存空间;在 64 位系统中,一个指针占用 8 字节(64 位)内存空间;
● char类型1个字节,float类型是4字节
● 在32位系统和64位系统下只有指针类型和长整型字节数有所差别,其余全部相同’

4、char指针转std::vector 解析

auto len = xx.size()
conda char *data = xx.c_str();
std::vector<float> hyps{(float *)data, (float *)data + len / sizeof(float)};

(1)const char * 转换成 float *

本来指针指向的是char类型,占用1个字节。现在是把char类型转换成float类型,占用4个字节。

(2)计算字符长度和指针偏移量

获取char类型的lenlen/4,也就是本来16个字符,现在转换成float,就只剩4个字符了。

(3)初始化vector容器

参考:C++:vector的初始化定义和赋值方法总结
      这里采用的是地址初始化的方式,参数有两个,一个float* 类型的data,一个是地址偏移量的尾端地址

(float *)data 返回的是指向data的初始地址
len/sizeof(float) = len/4 ,假如len=16,那么16/4=4
vector的初始化形如: std::vector<float> xx{float* data,float*data + 4}

(4)std::vector 的() 和 {}

要注意“()”和“{}”这样的初始化情况,比如:std::vector<int> nVec(10,1);    // 包含10个元素,且值为1std::vector<int> nVec{10,1};    // 包含2个元素,值分别为10,1

然而,一般在程序中,并不会知道vector的元素个数,故使用以上方式倒显得繁琐,所以可以使用push_back,它会负责将一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。

三、后记

指针类型转换部分,让博主想起了gounsafe.Pointer,go官方一开始就屏蔽掉了指针运算,让大家专注于业务的同时,也缺失了对指针运算的理解。有好有坏吧,学就完了。

end

c++的*号是否有空格的区别以及char*转std::vector<float>解析相关推荐

  1. string赋值-单引号和双引号的区别(php)

    在赋予一个string值的时候,可以用单引号或者双引号. 1.单引号和双引号的区别: 单引号:不会翻译变量. 双引号:会翻译变量,会将变量替换为之前赋予变量的值. 例子: (1)单引号: <?p ...

  2. PHP 单引号与双引号的区别(总结)

    看好多代码有时候用单引号或双引号实现包含字符串的内容,其实简单个概括下双引号中的变量可以解析,单引号就是绝对的字符串. 1.定义字符串  在PHP中,字符串的定义可以使用单引号,也可以使用双引号.但是 ...

  3. 【Java常识】6.0面向对象认知和Eclipse的实用使用、==号和equals方法的区别

    1.曾经写过很多自以为很通俗易懂的面向对象的解释. 如下是目前最通俗的一种解释: 2.Eclipse的补充解释. 运行的快捷键:F11. 3.Eclipse快捷键大全 大全放本文最后,这里主要放常用的 ...

  4. linux vim 单引号,单引号和双引号的区别、linux快捷键、zip压缩、lrzsz、vim常见问题...

    怎么去记忆? 大脑: 意识 == 内存 潜意识 === 硬盘 如何将知识放到潜意识中: 1. 交流讨论 - - 说出来 睡觉前,把当天学的内容和复习的内容,以语音的形式表达出来. 微信群里说出来. 自 ...

  5. c语言中常量单双引号,C语言常量中字元与字串 除了单引号与双引号的区别外,还有什么不同。...

    C语言常量中字元与字串 除了单引号与双引号的区别外,还有什么不同.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言 ...

  6. HTML中nbsp 和空格的区别?

    在html代码中,使用转义字符&nbsp表示1个空格,而使用转义字符&amp表示 &. 1.在html代码中&nbsp和空格的区别: 在html代码中每输入一个转义字符 ...

  7. hover前有无空格的区别

    hover前加不加空格的区别 问题描述 在使用hover时开始没有注意空格的影响,以至于达不到理想的样式,后通过学习发现hover前加不加空格是有区别的. 不加空格 .card:hover{curso ...

  8. SQL - 单引号和双引号的区别

    原文转载至:SQL中的单引号和双引号有区别吗? 在标准 SQL 中,字符串使用的是单引号. 如果字符串本身也包括单引号,则使用两个单引号(注意,不是双引号,字符串中的双引号不需要另外转义). 但在其它 ...

  9. sql 不使用引号、使用单引号或双引号的区别

    加引号和不加引号有什么区别? 表名和字段名,即使是中文也不用加单引号: 对于表格内的value值,要不要加单引号取决于这个字段设置的数据类型, 不加引号是数字类型,加了就是字符串或日期类型了 如果是 ...

最新文章

  1. 微服务架构中配置中心的选择
  2. 【剑指offer】反转链表,C++实现(链表)
  3. 无法添加选择的Web部件
  4. 准备写一个Ibatisnet开发指南
  5. 基于android的考勤定位算法,基于移动定位服务的考勤管理系统
  6. 测试软件ipc,IPC整机测试工具
  7. MVC 配置路由 反复走控制其中的action (int?)
  8. Oracle管理文件OMF (oracle managed files)
  9. 多模块Struts应用程序的几个问题(及部分解决方法)
  10. 错误描述: plugin scala is incompatible
  11. 《第三次浪潮》的体会!
  12. 我的奇思妙想机器人消防员_【小作家专栏】我的奇思妙想(三)
  13. 现金支票打印模板excel_WPS里面如何批量打印(WPS2019)
  14. Android apk签名-apksigner签名工具
  15. R语言使用epiDisplay包的roc.from.table函数可视化临床诊断表格数据对应的ROC曲线并输出新的诊断表(diagnostic table)、输出灵敏度、1-特异度、AUC值等
  16. jQuery下载及基本使用
  17. 一个比较牛逼人的博客
  18. 硬件基础:嵌入式软件可靠性设计要注意的问题
  19. 视频教程-WebGL 可视化3D绘图框架:Three.js 零基础上手实战-其他
  20. LeetCode(179) Largest Number

热门文章

  1. 服务器系统总是蓝屏,Windows 2012R2 服务器频繁蓝屏
  2. Matlab 绘制双纵轴图
  3. 生命周期模型_建立从思想到价值的生命周期模型
  4. PDF to Word Document Converter for Mac(PDF文档转换器)
  5. ubuntu上传文件到百度网盘
  6. 自定义View基础之——canvas,paint的基本用法
  7. 爬虫中使用selenium实现对斗鱼直播的各个房间标题、主播id,直播内容类型和热度信息的爬取
  8. 二叉查找树的平衡(DSW)
  9. 显示器竖屏显示会字体发虚的解决方法
  10. 网络原理之TCP/UDP协议