我以为自己能理解指针,但是我认为对指针的细微差别会导致我不太了解指针。当我将整数指针或整数地址传递给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;
}

最佳答案

您的showCharshowInt函数正在打印不同的内容。

showChar中,这是:

cout << &name << endl;

打印name的地址,它是一个局部变量。在showInt中,您不打印&num的值;而是打印num的值,它是一个地址,而不是局部变量的地址。

showChar中,如果要打印name的值作为地址,则需要将其转换为其他指针类型,例如void*:
cout << (void*)name << endl;

因为operator<<char*重载取消了char*指针的引用并打印了它指向的C样式字符串。

更详细地:
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
}

关于c++ - 传递给函数的Char指针与Int指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20131957/

10-15 06:55
查看更多