c++的*号是否有空格的区别以及char*转std::vector<float>解析
文章目录
- 一、前言
- 二、正文
- 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
类型的len
,len/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
)”。
三、后记
指针类型转换部分,让博主想起了go
的unsafe.Pointer
,go
官方一开始就屏蔽掉了指针运算,让大家专注于业务的同时,也缺失了对指针运算的理解。有好有坏吧,学就完了。
end
c++的*号是否有空格的区别以及char*转std::vector<float>解析相关推荐
- string赋值-单引号和双引号的区别(php)
在赋予一个string值的时候,可以用单引号或者双引号. 1.单引号和双引号的区别: 单引号:不会翻译变量. 双引号:会翻译变量,会将变量替换为之前赋予变量的值. 例子: (1)单引号: <?p ...
- PHP 单引号与双引号的区别(总结)
看好多代码有时候用单引号或双引号实现包含字符串的内容,其实简单个概括下双引号中的变量可以解析,单引号就是绝对的字符串. 1.定义字符串 在PHP中,字符串的定义可以使用单引号,也可以使用双引号.但是 ...
- 【Java常识】6.0面向对象认知和Eclipse的实用使用、==号和equals方法的区别
1.曾经写过很多自以为很通俗易懂的面向对象的解释. 如下是目前最通俗的一种解释: 2.Eclipse的补充解释. 运行的快捷键:F11. 3.Eclipse快捷键大全 大全放本文最后,这里主要放常用的 ...
- linux vim 单引号,单引号和双引号的区别、linux快捷键、zip压缩、lrzsz、vim常见问题...
怎么去记忆? 大脑: 意识 == 内存 潜意识 === 硬盘 如何将知识放到潜意识中: 1. 交流讨论 - - 说出来 睡觉前,把当天学的内容和复习的内容,以语音的形式表达出来. 微信群里说出来. 自 ...
- c语言中常量单双引号,C语言常量中字元与字串 除了单引号与双引号的区别外,还有什么不同。...
C语言常量中字元与字串 除了单引号与双引号的区别外,还有什么不同.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C语言 ...
- HTML中nbsp 和空格的区别?
在html代码中,使用转义字符 表示1个空格,而使用转义字符&表示 &. 1.在html代码中 和空格的区别: 在html代码中每输入一个转义字符 ...
- hover前有无空格的区别
hover前加不加空格的区别 问题描述 在使用hover时开始没有注意空格的影响,以至于达不到理想的样式,后通过学习发现hover前加不加空格是有区别的. 不加空格 .card:hover{curso ...
- SQL - 单引号和双引号的区别
原文转载至:SQL中的单引号和双引号有区别吗? 在标准 SQL 中,字符串使用的是单引号. 如果字符串本身也包括单引号,则使用两个单引号(注意,不是双引号,字符串中的双引号不需要另外转义). 但在其它 ...
- sql 不使用引号、使用单引号或双引号的区别
加引号和不加引号有什么区别? 表名和字段名,即使是中文也不用加单引号: 对于表格内的value值,要不要加单引号取决于这个字段设置的数据类型, 不加引号是数字类型,加了就是字符串或日期类型了 如果是 ...
最新文章
- 微服务架构中配置中心的选择
- 【剑指offer】反转链表,C++实现(链表)
- 无法添加选择的Web部件
- 准备写一个Ibatisnet开发指南
- 基于android的考勤定位算法,基于移动定位服务的考勤管理系统
- 测试软件ipc,IPC整机测试工具
- MVC 配置路由 反复走控制其中的action (int?)
- Oracle管理文件OMF (oracle managed files)
- 多模块Struts应用程序的几个问题(及部分解决方法)
- 错误描述: plugin scala is incompatible
- 《第三次浪潮》的体会!
- 我的奇思妙想机器人消防员_【小作家专栏】我的奇思妙想(三)
- 现金支票打印模板excel_WPS里面如何批量打印(WPS2019)
- Android apk签名-apksigner签名工具
- R语言使用epiDisplay包的roc.from.table函数可视化临床诊断表格数据对应的ROC曲线并输出新的诊断表(diagnostic table)、输出灵敏度、1-特异度、AUC值等
- jQuery下载及基本使用
- 一个比较牛逼人的博客
- 硬件基础:嵌入式软件可靠性设计要注意的问题
- 视频教程-WebGL 可视化3D绘图框架:Three.js 零基础上手实战-其他
- LeetCode(179) Largest Number