char *str,char str,char * str和char str的区别

news2024/10/1 9:39:02

1.char *str一个指向字符或字符串的指针,总是指向一个字符的起始地址,例如

char *str = "Hello";
cout << *str << endl;  // 输出:H
cout << str << endl;   // 输出:Hello
str ="World";         //指针变量本身地址没有改变,只是改变了指针指向的常量字符串地址
cout<< str <<endl;    //输出:World

2.char &str一个字符的引用,可以看作是字符的别名,对引用的修改可以直接影响原始值,例如 

char c = 'A';
char &str = c;
cout << str << endl;  // 输出:A

str = 'B';
cout << c << endl;    // 输出:B

对于函数中调用char *str和char &str的区别 

#include <iostream>
#include <cstring>
using namespace std; 

void ModifyPointer(char *str) {
    str = "World";  // str是指向字符串的起始位置,而不是字符串本身,所以这样写是错误的,会返回原值
}

void ModifyPointerone(char *str){
    strcpy(str,"World");	//新的字符串内容复制到已存在的字符数组中 
}

void ModifyPointertwo(char *str){
	str[0]='P';			//改变字符串中起始位置的值,其余不变 
}

void ModifyPointerthree(char *str){
	str[2]='P';			//改变字符串中起始位置的值,其余不变 
}

void ModifyReference(char &str) {
    str = 'B';     // 修改引用的值,让它引用到另一个字符
}

void ModifyReferenceone(char &str) {
    strcpy(str,"world");     // 报错,只能修改一个字符
}


int main() {
    char greeting[] = "Hello";

    char *ptr = greeting;
    cout << ptr << endl;  // 输出:Hello

	ModifyPointer(ptr);
    cout << *ptr << endl;	//输出:H,指针指向字符的起始位置 
    
    ModifyPointer(ptr);
    cout << ptr << endl;  // 输出:Hello,指针的值未改变
    
    ModifyPointerone(ptr);
    cout <<ptr <<endl;		//输出:World,指针指向改变 
    
    ModifyPointertwo(ptr);
	cout <<ptr <<endl; 		//输出: Porld,指针的起始位置改变 
   
	ModifyPointerthree(ptr);
	cout <<ptr <<endl; 		//输出:PoPld,指针的三个值改变 
	
    char &ref = greeting[0];
    cout << ref << endl;  // 输出:P

    ModifyReference(ref);
    cout << ref << endl;  // 输出:B,引用的值被修改

	ModifyReferenceone(ref);
    cout << ref << endl;
	
    return 0;
}

 其中最重要的三点

•*str可以对字符或字符串进行改变

void ModifyPointerone(char *str){
    strcpy(str,"World");	//新的字符串内容复制到已存在的字符数组中 
}

void ModifyPointertwo(char *str){
	str[0]='P';			//改变字符串中起始位置的值,其余不变 
}

•&str只能使一个字符改变 

    char &ref = greeting[0];
    cout << ref << endl;  // 输出:P

    void ModifyReference(char &str) {
    str = 'B';     // 修改引用的值,让它引用到另一个字符
    }

    ModifyReference(ref);
    cout << ref << endl;  // 输出:B,引用的值被修改

•函数的参数调用和主函数中的引用

char *str = "Hello";
cout << str << endl;   // 输出:Hello
str ="World";         //指针变量本身地址没有改变,只是改变了指针指向的常量字符串地址
cout<< str <<endl;    //输出:World


void ModifyPointer(char *str) {
    str = "World";  
// 参数str是指向字符串的起始位置,而不是字符串本身,所以这样写是错误的,会返回原值
}

补充:char *&str,char **str与char *str的区别

char *str:存储char类型对象的地址

char **str:是一个指向指针的指针,用于表示一个指针数组

可以看作char* *str:str是一个指针,指向的类型是char*

char *&str:声明了一个指向指针的引用,可以修改指针本身所指向的地址。

示例代码 

#include <iostream>
using namespace std;

void ModifyStringArray(char** str) {
    // 修改字符串数组中的第一个元素
    str[0] = "Modified";
}

void ModifyStringPointer(char*& str) {
    // 修改指向字符串的指针
    str = "Modified";
}

int main() {
    char* strArray[] = { "One", "Two", "Three" };

    char** ptrToStrArray = strArray;
    ModifyStringArray(ptrToStrArray);
    cout << strArray[0] << endl;  // 输出 "Modified"

    char* strPtr = strArray[1];
    ModifyStringPointer(strPtr);
    cout << strArray[1] << endl;  // 输出 "Modified"

    return 0;
}

由上可以看出char ** 和char *&可以完成同样的效果,但是写法是不同的

3.char str是一个单个字符的变量,储存一个字符的值,例如

char str = 'C';
cout << str << endl;  // 输出:C

str = 'D';
cout << str << endl;  // 输出:D

💖💖如有错误请大佬们多多指教,谢谢大佬们!!💖💖

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.4 webrtc的线程

那今天呢&#xff1f;我们来了解一下webrtc中的threed&#xff0c;首先我们看一下threed的类&#xff0c;它里边儿都含了哪些内容&#xff1f;由于threed的类非常大啊&#xff0c;我们将它分成两部分。 那第一部分呢&#xff0c;是我们看threed的类中都包含了哪些数据之后呢&a…

linux设备驱动:kset、uevent、class

目录 kset&#xff1a;驱动的骨架 kset_create_and_add()函数 设备驱动模型实验2-kobject点灯&#xff08;加入kset&#xff09; kset.c文件 Makefile文件 执行过程 uevent&#xff1a;内核消息的快递包 uevent机制 kobject_uevent()函数 设备驱动模型实验3-kobject点…

AMBA总线协议(3)——AHB(一)

目录 一、前言 二、什么是AHB总线 1、概述 2、一个典型的基于AHB总线的微处理器架构 3、基本的 AHB 传送特性 三、AMBA AHB总线互联 四、小结 一、前言 在之前的文章中我们初步的了解了一下AMBA总线中AHB,APB,AXI的信号线及其功能&#xff0c;从本文开始我们…

NOIP2014普及组复赛 珠心算测验 螺旋矩阵 真题答案

珠心算测验 说明 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练&#xff0c; 既能够开发智力&#xff0c;又能够为日常生活带来很多便利&#xff0c;因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他…

wustoj2006后天

#include <stdio.h> int main() {int n;scanf("%d",&n); printf("%d",(n2)%7);return 0;}

星际争霸之小霸王之小蜜蜂(一)--窗口界面设计

目录 前言 一、安装pygame库 1、pygame库简介 2、在windows系统安装pygame库 二 、搭建游戏框架 1、创建游戏窗口 2、改变窗口颜色 总结 前言 大家应该都看过或者都听说过python神书“大蟒蛇”&#xff0c;上面有一个案例是《外星人入侵》&#xff0c;游戏介绍让我想起了上…

上位机系统(系统的架构、串口的使用、协议的定义、开发环境的配置)

上位机系统 1. 系统架构 实机拓扑架构 硬件支持 使用 VSPD 6.9 实现&#xff1a; 效果图 当状态值超过警戒值&#xff0c;就会变成红色&#xff0c;同时在界面的上方显示红色的“设备告警” 3. 串口电气特性 波特率&#xff1a;19200 数据位数&#xff1a;8 位 u 奇偶校验&…

shell脚本之函数

shell函数 函数的组成&#xff1a;函数名和函数体 函数的格式 function 函数名 { 命令序列 } function cat {cat /etc/passwd}函数名() { 命令序列 } cat () {cat /etc/passwd}function 函数名 (){ 命令序列 } function cat() {cat /etc/passwd}函数相关命令 declare -F #查…

记录每日LeetCode 2236. 判断根结点是否等于子结点之和 Java实现

题目描述&#xff1a; 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 初始代码&#xff1a; /*** Definition f…

Cpp学习——类与对象3

目录 一&#xff0c;初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二&#xff0c;单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…

7-7 找最小的字符串

分数 15 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 本题要求编写程序&#xff0c;针对输入的N个字符串&#xff0c;输出其中最小的字符串。 输入格式&#xff1a; 输入第一行给出正整数N&#xff1b;随后N行&#xff0c;每行给出一个长度小于80的非空字符串&…

js 中的原型

JavaScript规定&#xff0c;每一个构造函数都有一个prototype属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象。这个对象可以挂载函数&#xff0c;对象实例化不会多次创建原型上函数&#xff0c;节约内存。我们可以把那些不变的方法&#xff0c;直接定义在p…

NPM 为自己创建的组织付费

目录 1、升级为付费组织计划 2、查看、下载和通过电子邮件发送组织的收据 2.1 查看数据 3、更新组织账单设置 3.1 更新信用卡信息 3.2 更新帐单收据电子邮件和额外收据信息 4、降级为免费组织 1、升级为付费组织计划 作为组织所有者&#xff0c;您可以将免费组织计划升级…

智能监控系统的守护者:人工智能行为识别技术的崛起与发展

人工智能助力监控系统&#xff1a;行为识别在安全监控中的应用与挑战 摘要&#xff1a; 随着人工智能技术的快速发展&#xff0c;行为识别在监控系统中的应用逐渐成为安全监控领域的重要工具。本文将详细探讨人工智能行为识别技术在监控系统中的应用&#xff0c;以及在实际应用…

Tween.js动画函数使用demo

案例&#xff1a; 小球的运动数字的自增 demo <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&g…

AI 绘画Stable Diffusion 研究(十三)SD数字人制作工具SadTlaker使用教程

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 想必大家经常看到&#xff0c;无论是在产品营销还是品牌推广时&#xff0c;很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵&#xff0c;少则几…

spring事件监听event(默认的mq)

文章目录 前言一、event是什么&#xff1f;二、使用步骤1.事件2.事件监听3.发布事件 三、测试结果总结 前言 项目中的业务难免是相互关联的,但是代码中我们应该尽量做到低耦合,常见的做法就是引入mq来作为松耦合的一种手段; 其实最常见的解耦和就是接口了,MVC直接通过接口(约定…

反弹shell bash -i命令

目录 0x01 什么是反弹shell&#xff1f;   0x02 命令拆分详解   0x03 文件描述符   0x04 shell 输入/输出重定向   0x05 输入输出结合获得shell 什么是反弹shell&#xff1f; 假设有两台主机 A(控制端) B(被控端) 正向shell&#xff0c;就是ssh、Telnet的连接&#xf…

YOLOv5源码中的参数超详细解析(4)— 推理部分detect.py

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5是一种先进的目标检测算法&#xff0c;它可以实现快速和准确的目标检测。detect.py是YOLOv5项目目录结构中的一个重要的脚本文件&#xff0c;它用于执行目标检测任务&#xff0c;可以通过命令行参数指定要检测的图像…