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

简介: 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

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


目录
相关文章
|
4月前
|
存储 数据管理 数据库
|
存储 SQL 数据库
char、varchar、nvarchar、text的区别
char、varchar、nvarchar、text的区别
106 0
|
7月前
|
存储 机器学习/深度学习 关系型数据库
mysql中char和varchar的区别
mysql中char和varchar的区别
194 1
|
7月前
|
存储 数据库
5. CHAR和VARCHAR的区别?
`CHAR`和`VARCHAR`在数据库中有所不同:`CHAR`长度固定,用空格填充,存储效率高,英文占1字节,汉字占2字节;而`VARCHAR`长度可变,节省空间,英文和汉字都占2字节。
88 0
|
7月前
|
存储 SQL NoSQL
面试题:char和varchar的区别?
字节面试题:char和varchar的区别?
139 0
|
存储
char和varchar的区别(秒懂!)
char和varchar的区别(秒懂!)
120 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL之varchar和char的区别
MySQL之varchar和char的区别
74 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL 总结char与varchar的区别
MySQL 总结char与varchar的区别
75 0
|
SQL Oracle 关系型数据库
sql中sysdate 和 current_date 的区别及to_char( tv_date, ‘YYYY-MM-DD‘)当天时间与数据库时间的格式转换与比较
在oracle中current_date与sysdate都是显示当前系统时间, 其结果基本相同,但是有三点区别: 1. current_date返回的是当前会话时间,而sysdate返回的是服务器时间; 2. current_date有时比sysdate快一秒,这可能是四舍五入的结果; 3. 如果修改当前会话的时区,比如将中国的时区为东八区,修改为东九区,则current_date显示的时间为东九区时间, 根据东加西减的原则,current_date应该比sysdate快一小时。
526 0
sql中sysdate 和 current_date 的区别及to_char( tv_date, ‘YYYY-MM-DD‘)当天时间与数据库时间的格式转换与比较
|
存储 Java 索引
String和Char的区别
String和Char的区别
527 1