当前位置: 代码网 > it编程>编程语言>C/C++ > C++中指针变量的使用指南

C++中指针变量的使用指南

2026年01月07日 C/C++ 我要评论
指针是c++中的一个核心概念,它存储的是内存地址,而不是实际的值。理解指针对于掌握c++编程至关重要。1. 基本概念指针的定义和声明int x = 10; // 普通变量int *pt

指针是c++中的一个核心概念,它存储的是内存地址,而不是实际的值。理解指针对于掌握c++编程至关重要。

1. 基本概念

指针的定义和声明

int x = 10;         // 普通变量
int *ptr = &x;      // 指针变量,存储x的地址
  • *表示声明一个指针
  • & 是取地址运算符
  • ptr 存储的是 x 的内存地址
  • *ptr 是解引用,获取该地址存储的值

2. 指针的基本操作

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    int *ptr = &x;      // ptr指向x
    
    cout << "x的值: " << x << endl;           // 输出: 10
    cout << "x的地址: " << &x << endl;        // 输出: x的地址
    cout << "ptr的值: " << ptr << endl;       // 输出: x的地址
    cout << "*ptr的值: " << *ptr << endl;     // 输出: 10
    
    *ptr = 20;  // 通过指针修改x的值
    cout << "修改后x的值: " << x << endl;     // 输出: 20
    
    return 0;
}

3. 指针类型

空指针

int *ptr = nullptr;  // c++11及以后推荐
int *ptr = 0;        // 传统方式
int *ptr = null;     // c风格,不推荐在c++中使用

悬空指针(野指针)

指向已释放内存的指针,使用会导致未定义行为:

int *ptr = new int(10);
delete ptr;
// ptr现在成为悬空指针,应该避免使用
ptr = nullptr;  // 好习惯:释放后置为空

4. 指针运算

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;  // 指向数组首元素

cout << *ptr << endl;      // 输出: 1
cout << *(ptr + 1) << endl;// 输出: 2(指针加法)
cout << ptr[2] << endl;    // 输出: 3(数组语法)

ptr++;  // 移动到下一个元素
cout << *ptr << endl;      // 输出: 2

5. 动态内存分配

// 分配单个变量
int *p = new int;          // 分配内存
*p = 100;                  // 赋值
delete p;                  // 释放内存
p = nullptr;               // 置空

// 分配数组
int *arr = new int[5];     // 分配5个int的空间
for (int i = 0; i < 5; i++) {
    arr[i] = i * 10;
}
delete[] arr;              // 释放数组内存

6. 多级指针

int x = 10;
int *p = &x;       // 一级指针
int **pp = &p;     // 二级指针
int ***ppp = &pp;  // 三级指针

cout << x << endl;      // 10
cout << *p << endl;     // 10
cout << **pp << endl;   // 10
cout << ***ppp << endl; // 10

7. 指针和函数

指针作为函数参数(按地址传递)

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 5, y = 10;
    swap(&x, &y);  // 传递地址
    cout << x << ", " << y << endl;  // 输出: 10, 5
    return 0;
}

返回指针的函数

int* createarray(int size) {
    return new int[size];  // 返回动态数组的指针
}

// 注意:不要返回局部变量的地址
int* badfunction() {
    int x = 10;
    return &x;  // 错误!x在函数结束后被销毁
}

8. 指针和数组

int arr[3] = {1, 2, 3};

// 数组名在多数情况下退化为指针
int *ptr = arr;  // 等价于 int *ptr = &arr[0];

// 通过指针遍历数组
for (int i = 0; i < 3; i++) {
    cout << *(ptr + i) << " ";  // 输出: 1 2 3
}

9. const 和指针

int x = 10;
int y = 20;

// 指向常量的指针(不能通过指针修改值)
const int *ptr1 = &x;
// *ptr1 = 30;  // 错误!
ptr1 = &y;      // 正确:可以改变指向

// 常量指针(不能改变指向)
int *const ptr2 = &x;
*ptr2 = 30;     // 正确:可以修改值
// ptr2 = &y;   // 错误!

// 指向常量的常量指针
const int *const ptr3 = &x;
// *ptr3 = 30;  // 错误!
// ptr3 = &y;   // 错误!

10. 智能指针(c++11及以上)

智能指针自动管理内存,避免内存泄漏:

#include <memory>

// unique_ptr:独占所有权
std::unique_ptr<int> uptr(new int(10));

// shared_ptr:共享所有权
std::shared_ptr<int> sptr1 = std::make_shared<int>(20);
std::shared_ptr<int> sptr2 = sptr1;  // 引用计数增加

// weak_ptr:弱引用,不增加引用计数
std::weak_ptr<int> wptr = sptr1;

到此这篇关于c++中指针变量的使用指南的文章就介绍到这了,更多相关c++ 指针变量内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com