C++ Char指针与传递给函数的Int指针

C++ Char指针与传递给函数的Int指针,c++,function,pointers,char,C++,Function,Pointers,Char,我以为我理解指针,但我认为它们被区别对待的方式有一个细微差别,我没有完全理解。当我将整数指针或整数地址传递给showInt时,它将打印出与函数外部相同的内存地址。然而。当我将以下指针传递给showChar时 char* value = "One"; showChar(value); 第一个元素的地址在函数内部与函数外部不同。我知道这与按值传递是一致的,并且指针的副本是在函数中生成的,但是我的印象是指针的副本仍然保持相同的地址。为什么在处理指向char的指针时会有所不同?如果char指针只存储字

我以为我理解指针,但我认为它们被区别对待的方式有一个细微差别,我没有完全理解。当我将整数指针或整数地址传递给showInt时,它将打印出与函数外部相同的内存地址。然而。当我将以下指针传递给showChar时

char* value = "One";
showChar(value);
第一个元素的地址在函数内部与函数外部不同。我知道这与按值传递是一致的,并且指针的副本是在函数中生成的,但是我的印象是指针的副本仍然保持相同的地址。为什么在处理指向char的指针时会有所不同?如果char指针只存储字符串文本的第一个元素的地址,那么为什么函数中的指针不指向相同的内存位置,而是指向内存中的新区域?这对我来说意味着它不是复制一个char指针,而是创建一个新的char指针并将原始指针指向的值赋给它。如果是这样,我不明白为什么

我知道,您可以通过将指针传递给指针,或者将引用传递给指针,来访问函数中的指针地址,但这种情况的原因仍然让我感到困惑

将指针传递给char

void showChar(char* name){

 cout << name << endl;
 cout << &name << endl;
}
void showInt(int* num){

 cout << num << endl;
 cout << *num << endl;
}
void showChar(char*name){

coutshowChar
中的第一行:

    cout << name << endl;

您不打印指针地址
name
,而是打印局部变量
name
的指针(地址)(它恰好是指针类型)。这将引用次数增加了一次。您需要的是更改
操作符您的
showChar
showInt
函数打印不同内容的方式

showChar
中,这是:

cout << &name << endl;

因为
operator的重载说明
char*value=“One”;
是C++中不推荐使用的转换
char*name
在堆栈上,所以当你得到它的地址时,它是一个不同的地址,就像
&num
会给你一个不同的值一样。我想如果你这样做了
cout@leems;我知道char*value=“One”和char-value[]=“One”之间有区别.我只是想了解行为上的差异,以及为什么指向字符数组的指针会有不同的行为。@MartynShutt,Leems说的是,你应该在指针前面加上
const
,因为
是“一”
可以通过
常量char*
指向,而不是
char*
@Shahba;因为我正在初始化指向字符串文本的指针?啊。所以这在行为上没有区别,但与@MartynShutt的方式有关:特殊行为仅适用于指针参数。不能将数组作为参数传递给
oper我理解。这完全符合我对指针行为的期望。我开始认为我完全误解了他们的行为。谢谢。谢谢你的解释。我已经标记了你的答案,因为这也回答了我的问题。不幸的是,我只能接受一个答案,但是你的答案也是错误的我很清楚地解释了我错在哪里。
void showChar(char* name){
    cout << (void*)name << endl;
}
cout << &name << endl;
cout << (void*)name << endl;
void showChar(char* name){
 cout << name << endl;    // prints the contents of the string that
                          // `name` points to
 cout << &name << endl;   // prints the address of the local variable `name`
}

void showInt(int* num){
 cout << num << endl;     // prints the value of the pointer `num`
 cout << *num << endl;    // prints the value of the `int` object that
                          // `num` points to
}