根据答案https://stackoverflow.com/a/11842442/5835947,如果您这样编码,函数参数Bubble * targetBubble
将被复制到函数内。
bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
targetBubble = bubbles[i];
}
然而,我做了一个测试,发现指针作为函数参数将与外部指针相同,直到我更改了它的值:
// c++ test ConsoleApplication2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "c++ test ConsoleApplication2.h"
using namespace std;
#include<iostream>
int main()
{
int a= 1;
int* pointerOfA = &a;
cout << "address of pointer is" << pointerOfA << endl;
cout << *pointerOfA << endl;
func(pointerOfA);
cout << *pointerOfA << endl;
}
void func(int *pointer)
{
cout << "address of pointer is " << pointer <<" it's the same as the pointer outside!"<<endl;
int b = 2;
pointer = &b;
cout << "address of pointer is" << pointer <<" it's changed!"<< endl;
cout << *pointer<<endl;
}
输出如下:
address of pointer is0093FEB4
1
address of pointer is 0093FEB4 it's the same as the pointer outside!
address of pointer is0093FDC4 it's changed!
2
1
所以,事实是,作为函数参数的指针不会被复制,直到它被改变,对吧?或者我在这里遗漏了什么?
答案 0 :(得分:2)
指针(只保存一个地址的变量 - 通常只是一个32位或64位整数)被复制。 指向的指针不是。
是的,你 缺少某些东西。您需要了解指针不它指向的对象。它只是一个小整数值,表示&#34;那个对象在那里&#34; - 并且复制指针很便宜并且不会改变它所指向的内容。
答案 1 :(得分:0)
使用指针是因为它不会复制整个对象,而这可能是昂贵的,它将复制/ psas作为对象地址的参数。当您将指针传递给函数并在函数外部或函数中对其进行更改时,它将修改同一对象。您正在通过*p
打印指向对象的值。如果要检查是否复制了指针变量,请输出p
并检查哪些可能不同。