自学内容网 自学内容网

C++之指针和引用

在C++中,指针和引用是两种不同的机制,它们都可以用来间接访问变量。

指针

指针的声明和初始化

指针是一个变量,其值为另一个变量的地址。指针的声明语法如下:

type* ptrName;

例如,声明一个指向整数的指针:

int* ptr;

初始化指针,使其指向一个变量:

int var = 10;
int* ptr = &var;

这里&var是取地址运算符,它获取var的内存地址。

指针运算

指针可以进行一些特定的运算,如增加指针的值来移动到下一个元素(对于数组指针):

ptr++; // 移动到下一个整数

也可以比较指针:

if (ptr1 == ptr2) {
    // 指针指向相同的地址
}

还可以使用指针访问和修改它所指向的值:

*ptr = 20; // 修改ptr所指向的值为20
指针和数组

指针可以用于数组的遍历:

int arr[] = {1, 2, 3, 4, 5};
int* ptr = arr; // ptr指向数组的第一个元素
for (int i = 0; i < 5; ++i) {
    std::cout << *(ptr + i) << " "; // 输出数组元素
}

这里ptr + i是指针的算术运算,它移动指针到数组的第i个元素。

指针和函数

指针可以用来传递函数参数的地址,这样函数可以修改实际参数:

void increment(int* ptr) {
    (*ptr)++;
}

int main() {
    int value = 0;
    increment(&value);
    std::cout << value << std::endl; // 输出1
    return 0;
}
动态内存管理(new和delete)

使用new分配动态内存,并使用delete释放:

int* ptr = new int(10); // 分配一个整数并初始化为10
delete ptr; // 释放内存

对于数组,使用new[]delete[]

int* arr = new int[5]; // 分配一个包含5个整数的数组
delete[] arr; // 释放数组内存

引用

引用的概念

引用是另一个变量的别名,一旦引用被初始化为一个变量,它就不能被改变为指向另一个变量。

引用的声明和使用

引用的声明语法如下:

type& refName;

例如,声明一个整数的引用:

int& ref = var;

这里ref就是var的别名,对ref的任何操作都等同于对var的操作。

引用和指针的区别
  1. 初始化:引用必须在声明时被初始化,而指针不必。
  2. 重新赋值:引用一旦被初始化后不能改变指向,而指针可以随时改变指向。
  3. 语法:使用引用时不需要解引用操作符*,而使用指针时需要。
  4. 语法糖:在函数参数中使用引用可以避免复制,提高效率,而指针则需要显式地解引用。
  5. 数组:不能有数组的引用,但可以有指向数组的指针。

原文地址:https://blog.csdn.net/weixin_42300449/article/details/143476879

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!