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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值