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