【发布时间】:2013-12-06 13:43:09
【问题描述】:
我以为我理解了指针,但我认为它们被区别对待的方式存在细微差别,我并没有完全理解。当我将整数指针或整数地址传递给 showInt 时,它将打印出与函数外部相同的内存地址。然而。当我将以下指针传递给 showChar 时;
char* value = "One";
showChar(value);
函数内部的第一个元素的地址与函数外部的地址不同。我知道这是与按值传递一致的行为,并且指针的副本是在函数内制作的,但是我的印象是指针的副本仍然具有相同的地址。为什么在处理指向 char 的指针时会有所不同?如果 char 指针只是存储字符串字面量的第一个元素的地址,那么为什么函数中的指针不指向相同的内存位置,而是指向内存中的新区域?这表明它不是复制 char 指针,而是创建一个新的 char 指针并将其分配给原始指针指向的值。如果是这样,我不明白为什么。
我知道您可以通过传递指向指针或引用指向指针来访问函数中的指针地址,但为什么会这样仍然让我感到困惑。
传递一个指向 char 的指针;
void showChar(char* name){
cout << name << endl;
cout << &name << endl;
}
传递指向 int 的指针;
void showInt(int* num){
cout << num << endl;
cout << *num << endl;
}
【问题讨论】:
-
请注意,
char* value = "One";是 C++ 中不推荐使用的转换 -
char* name在堆栈上,所以当你得到它的地址时,它是一个不同的地址,就像&num会给你一个不同的值一样。我认为如果您使用cout << (void*) name << endl;,您将获得相同的价值。 -
@leemes;我知道 char* value = "One" 和 char value[] = "One" 之间存在差异。我只是想了解行为的差异,以及为什么指向字符数组的指针行为不同。
-
@MartynShutt,leemes 的意思是,你应该在指针前加上
const,因为"One"可以由const char *指向,而不是char *。跨度> -
@Shahba;因为我正在初始化指向字符串文字的指针?
标签: c++ function pointers char