C++ 之字符串、字符数组与字符指针(*、**)

C++ 之字符串、字符数组与字符指针(*、**)

  • 最近频繁使用字符串+指针,有时候想取值或者复制,常用到问题,在此总结一下
  • 字符串的处理、指针的使用
  • 长期更新版~

1. char 使用相关

1.1 内存使用

  • 首先介绍一下C语言中的数据类型:
    在这里插入图片描述
  • 下图给出了不同数据类型所占的字节数,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。以下列出了32位系统与64位系统的存储大小的差别(windows 相同):在这里插入图片描述
#include <stdio.h>
#include <float.h>int main()
{printf("float 存储最大字节数 : %lu \n", sizeof(float));printf("float 最小值: %E\n", FLT_MIN );printf("float 最大值: %E\n", FLT_MAX );printf("精度值: %d\n", FLT_DIG );return 0;
}**********output***********
float 存储最大字节数 : 4 
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6

1.2 指针

  • 指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
//type *var_name;
char* data;  
char** data_locatioin
int* abc;
  • 举个例子:
#include <stdio.h>int main ()
{int var_runoob = 10;int *p;              // 定义指针变量p = &var_runoob;printf("var_runoob 变量的地址: %p\n", p);return 0;
}*********output***********
var_runoob 变量的地址: 0x7ffeeaae08d8

在这里插入图片描述

1.3 字符串

  • 字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。
  • 声明/定义如下:
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
char site[] = "RUNOOB";

在这里插入图片描述

#include <stdio.h>int main ()
{char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};printf("菜鸟教程: %s\n", site );char str1[14] = "runoob";char str2[14] = "google";char str3[14];int  len ;/* 复制 str1 到 str3 */strcpy(str3, str1);printf("strcpy( str3, str1) :  %s\n", str3 );/* 连接 str1 和 str2 */strcat( str1, str2);printf("strcat( str1, str2):   %s\n", str1 );/* 连接后,str1 的总长度 */len = strlen(str1);printf("strlen(str1) :  %d\n", len );return 0;
}

1.4 字符指针

  • 指针就是个变量,用来存放地址,地址唯一标识一块内存空间;指针的大小是固定的4/8个字节(32平台/64平台)。
char ch = 'w';	//字符变量ch
char* pc=&ch;	//将字符变量ch的地址取出来,存在pc中。pc就被称为字符指针,类型就是char--->
*pc = 'w';
  • 将字符串赋值给一个字符指针变量p,不是把字符串的内容赋值给pstr,而是把字符串首字符的地址赋给了pstr
int main(){char* pstr="hello";printf("%s\n",pstr);return 0;
}
  • 打印:
  • 打印一个字符,用%c,p里面存的是a的地址,*p就是a。
  • 打印整个字符,遇到**“\0”**停止,用%s,p里面存的就是a的地址。直接把p放在后面,就从p存的地址处开始打印一个字符串,就能打印出“abcdef”。
int main() {char arr[] = "abcdef";	//字符串存入arr数组里面char* pc=arr;//pc字符指针存放数组名,即首元素地址。printf("%s\n", arr);   //abcdefprintf("%s\n", pc);    //abcdefprintf("%c\n",*pc);    //a printf("%s\n", pc+2);  //cdeffor(int i=0;i<7;i++){printf("%c",*(pc+i));}return 0;
}***********output**********
abcdef
abcdef

2. 字符指针传参

  • 通常图像数据会被定义为uchar/unsigned char类型的指针存储,下边给出调用方式:
#include<opencv/opencv2.hpp>int add(uchar*srcdata1,uchar*srcdata2,uchar*dstdata,int h,int w,int c)
{if(c==3){cv::Mat src1=cv::Mat(h,w,CV_8UC3,srcdata1);}.....
}
  • 但是今天遇到了一个指针传参的问题,是通过C++的exe中调用C++封装的dll中的接口更新指针数据/图像数据
//DLL中函数定义:
int DLL WINAPI imgGrab(unsigned char* imgdata)
{imgdata=getNextFrame();
}//exe中:
main()
{uchar* data=new uchar[h*w*c];imgGrab(data);
}
------如上方法调用时,在dll中图像数据正常,但是传递出来的图像数据全为0,异常---
---->然后做了如下修改:
//DLL中函数定义:
int DLL WINAPI imgGrab(unsigned char** imgdata)
{*imgdata=getNextFrame();
}//exe中:
main()
{uchar* data=new uchar[h*w*c];imgGrab(&data);
}
------->解决!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194211.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【文件读取/包含】任意文件读取漏洞 afr_1

1.1漏洞描述 漏洞名称任意文件读取漏洞 afr_1漏洞类型文件读取漏洞等级⭐漏洞环境docker攻击方式 1.2漏洞等级 高危 1.3影响版本 暂无 1.4漏洞复现 1.4.1.基础环境 靶场docker工具BurpSuite 1.4.2.靶场搭建 1.创建docker-compose.yml文件 version: 3.2 services: web: …

服务器数据恢复—磁盘出现坏道掉线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌服务器中有一组16块SAS接口硬盘组建的raid5磁盘阵列。 服务器故障&检测&#xff1a; 服务器raid5阵列中有2块硬盘掉线&#xff0c;上层服务器应用崩溃&#xff0c;导致服务器数据丢失。丢失的数据主要是4个1.5TB大小的卷中的数据&am…

番外 2 : LoadRunner 的安装以及配置

LoadRunner 的安装以及配置教程 一 . 配置 IE 浏览器二 . 安装 LoadRunner 工具三 . 修改默认浏览器的配置四 . 设置 LoadRunner 能够获取本地资源 Hello , 大家好 , 又给大家带来新的专栏喽 ~ 这个专栏是专门为零基础小白从 0 到 1 了解软件测试基础理论设计的 , 虽然还不足以…

代码随想录算法训练营第五十一天|309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费

第九章 动态规划part12 309. 买卖股票的最佳时机含冷冻期 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&…

安全好用性价比高的远程协同运维软件有吗?

据悉不少IT专业人员认为&#xff0c;远程运维风险性更高&#xff0c;更容易给企业带来更大的风险。所以不少运维人员都在求一款安全好用性价比高的远程协同运维软件&#xff0c;因为下班需要&#xff0c;因为碰到IT难题时候需要&#xff0c;因为驻场需要。那你知道市面上安全好…

基于非对称纳什谈判的多微网电能共享运行优化策略(附带MATLAB程序)

基于非对称纳什谈判的多微网电能共享运行优化策略MATLAB程序 参考文献&#xff1a; 《基于非对称纳什谈判的多微网电能共享运行优化策略》——吴锦领 资源地址&#xff1a; 基于非对称纳什谈判的多微网电能共享运行优化策略MATLAB程序 MATLAB代码&#xff1a;基于非对称纳什…

Python---数据序列中的公共方法

公共方法就是 支持大部分 数据 序列。 常见公共方法---简单 运算符描述支持的容器类型合并字符串、列表、元组* 复制字符串、列表、元组in元素是否存在字符串、列表、元组、字典not in元素是否不存在字符串、列表、元组、字典 案例&#xff1a; 合并 代码&#xff1…

网络安全准入技术之MAC VLAN

网络准入控制作为主要保障企业网络基础设施的安全的措施&#xff0c;特别是对于中大型企业来说&#xff0c;终端类型多样数量激增、终端管理任务重难度大、成本高。 在这样的一个大背景下&#xff0c;拥有更灵活的动态识别、认证、访问控制等成为了企业网络安全的最核心诉求之…

STM32CubeIDE报“xxx is not implemented and will always fail”解决方法

本文介绍STM32CubeIDE报“xxx is not implemented and will always fail”解决方法。 最近用STM32CubeIDE开发STM32程序时&#xff0c;编译报警告&#xff1a; warning: _close is not implemented and will always fail warning: _lseek is not implemented and will always…

云ES高级监控告警

一、高级监控告警配置 1.1 操作入口 1.2 配置告警模块 1.2.1 新建联系人 添加联系人后,需要进行激活 1.2.2 新建联系人组 1.2.3 创建报警组 1.2.4 新建报警规则

ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析

目录 一、cenc-aes-ctr 原理介绍 二、显式 cenc-aes-ctr 和隐式 cenc-aes-ctr 三、加密工具---ffmpeg 四、播放---ffplay 五、总结 ​​​​​​​一、cenc-aes-ctr 原理介绍 加密算法&#xff1a;CENC-AES-CTR 使用 AES&#xff08;Advanced Encryption Standard&…

设计模式之工厂模式 ( Factory Pattern )(1)

其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解&#xff0c;对代码有一定的设计要求&#xff0c;工作中融入才是最好的 工厂模式 ( Factory Pattern ) 工厂模式&#xff08;Factory Pattern&#xff09;提供了一种创建对象的最佳方式 工厂模式在创建对…

【MATLAB源码-第79期】基于蚯蚓优化算法(EOA)的栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚯蚓优化算法&#xff08;Earthworm Optimisation Algorithm, EOA&#xff09;是一种启发式算法&#xff0c;灵感来源于蚯蚓在自然界中的行为模式。蚯蚓优化算法主要模仿了蚯蚓在寻找食物和逃避天敌时的行为策略。以下是蚯蚓…

交换机如何配置BGP协议

环境&#xff1a; 华为交换机 华三交换机 问题描述&#xff1a; 交换机如何配置BGP协议 解决方案&#xff1a; 华三交换机上配置案例 1.配置BGP协议&#xff0c;可以按照以下步骤进行&#xff1a; 登录交换机&#xff1a;使用SSH、Telnet或控制台等方式登录到华三交换…

个人简历管理系统winform

说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于C#winform架构和sql server数据库 功能模块&#xff1a; 个人简历管理系统 简历信息添加 修改 删除 查询简历 运行环境&#xff1a; 运行需vs2013或者以上版本&#xff0…

golang 解析oracle 数据文件头

package mainimport ("encoding/binary""fmt""io""os" ) // Powered by 黄林杰 15658655447 // Usered for parser oracle datafile header block 1 .... // oracle 数据文件头块解析 // KCBlockStruct represents the structure of t…

桂院校园导航 | 云上高校导航 云开发项目 二次开发教程 1.3

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Campus-Guide 演示视频 中国大学生计算机设计大赛-移动应用与开发-云上高校导航 升级日志 1.3 优化了小程序的数据存储方式&#xff0c;对部分页面进行了调整&#xff0c;调整了功能和代码。 引…

数据结构-二叉树力扣题

目录 1.相同的树 2.二叉树中查找值为x的节点 3.单值二叉树 4.对称二叉树 5.二叉树的前序遍历 6.另一颗树的子树 层序遍历&#xff1a; 7.二叉树遍历 8.判断二叉树是否是完全二叉树 一个特殊的性质&#xff1a; 1.相同的树 题目链接&#xff1a;力扣&#xff08;LeetC…

DSP生成hex方法

以下使用两种方法生成的HEX文件&#xff0c;亲测可用 &#xff08;1&#xff09;万能法 不管.out文件是哪个版本CCS编译器生成的&#xff0c;只要用HEX2000.exe软件&#xff0c;翻译都可以使用。方法&#xff1a; hex2000 -romwidth 16 -memwidth 16 -i -o 20170817chuankou…

CentOS修改root用户密码

一、适用场景 1、太久没有登录CentOS系统&#xff0c;忘记管理密码。 2、曾经备份的虚拟化OVA或OVF模板&#xff0c;使用模板部署新系统后&#xff0c;忘记root密码。 3、被恶意攻击修改root密码后的紧急修复。 二、实验环境 1、VMware虚拟化的ESXI6.7下&#xff0c;通过曾经…