当函数接收一个一级指针作为参数,并接收到另一个一级指针变量作为实参时,为何无法直接通过这个指针修改其指向的实际对象(变量)的值?
时间: 2024-11-30 16:17:07 浏览: 3
当函数接收一个一级指针作为参数并试图通过这个指针去修改另一个一级指针所指向的对象的值时,实际上它是在操作内存地址,而不是直接操作对象本身。这是因为传递的是指针的副本,而非对象本身。所以,对函数内的指针进行修改不会影响到原始指针指向的实际对象。
举例来说,如果有一个声明像这样的:
```cpp
void modifyPointer(int* ptr, int* otherPtr) {
*otherPtr = 42; // 这里只是改变了otherPtr所指向的位置的值
}
int main() {
int x = 10;
int* myPtr = &x;
modifyPointer(myPtr, &myPtr); // 函数内部改变了myPtr的副本,不影响x
cout << x; // 输出还是10
}
```
在这个例子中,`modifyPointer`尝试通过`otherPtr`改变`myPtr`的内容,但实际上它改变了的是`myPtr`副本的值,`myPtr`本身的值并没有变。想要真正地改变原对象的值,函数需要操作`*ptr`,即解引用后操作实际的值。
相关问题
若数组名以形参作为实参二指针变量作为形参,函数调用实参传给形参的是
指向数组首元素的指针。
当我们将数组名作为函数参数传递时,实际上传递给函数的是数组的地址,也就是指向数组首素的指针。在函数中,我们可以通过指针来访问数组中的每一个元素。
当我们将二维数组作为函数参数传递时,实际上传递给函数的是指向二维数组首元素的指针,也就是指向第一行的指针。我们可以通过指针来访问整个二维数组。
c++将指向对象的指针作为函数参数 形参是对象指针 实参是什么
在 C++ 中,当我们将指向对象的指针作为函数参数时,形参是指函数定义中的变量,它是一个引用到对象的内存地址。实参则是当你调用函数时传递给这个形参的具体值,通常是一个对象的实例或者对象的指针。
例如:
```cpp
void displayStudent(Student* studentPtr) { // 函数声明,形参为 Student 类型的指针
cout << "Name: " << studentPtr->name << ", Age: " << studentPtr->age << endl;
}
// 调用函数时,实参可以是一个具体的 Student 对象
Student john{"John", 20};
displayStudent(&john); // &john 是 john 对象的指针
// 或者是一个 Student 指针变量
Student* ptr = new Student{"Alice", 25};
displayStudent(ptr);
```
在这个例子中,`&john` 和 `ptr` 都是实参,它们都指向了实际的学生对象。通过指针作为参数,函数可以处理任意类型的 Student 对象,体现了 C++ 的动态绑定特性。
阅读全文