当前位置: 首页 > news >正文

C++指针的使用

1. 指针的定义和使用

指针是存储变量地址的变量。定义格式如下:

类型 *指针名;

示例:

int a = 10;
int* p = &a; // p存储a的地址
std::cout << *p << std::endl; // 输出10,*p为解引用

2. 指针占据的内存空间

• 指针本身也是一个变量,存储的是地址
• 在32位系统下,指针占4字节;在64位系统下,指针占8字节,与指向的数据类型无关。
示例:

int* p1;
double* p2;
std::cout << sizeof(p1) << " " << sizeof(p2) << std::endl; // 通常输出4或8

3. 空指针

• 空指针(nullptr或NULL)表示指针未指向任何有效内存。
• 常用于初始化指针,防止野指针。
示例:

int* p = nullptr;
if (p == nullptr) {std::cout << "p是空指针" << std::endl;
}

4. 野指针

• 指针未初始化或已释放内存后仍被使用,称为野指针。
• 使用野指针会导致未定义行为,需避免。
示例:

int* p; // 未初始化,p为野指针
// *p = 10; // 错误,不能解引用野指针

5. const修饰指针

• const可以修饰指针本身或指针指向的数据。

形式含义
const int* p指向常量的指针,不能通过p修改值
int* const p常量指针,p的地址不可变
const int* const p指向常量的常量指针

示例:

int a = 10, b = 20;
const int* p1 = &a; // *p1只读
int* const p2 = &a; // p2只指向a
const int* const p3 = &a; // 都不可变

6. 指针和数组

数组名本质上是首元素的指针
• 可以用指针遍历数组
示例:

int arr[3] = {1, 2, 3};
int* p = arr;
for (int i = 0; i < 3; ++i) {std::cout << *(p + i) << " "; // 输出1 2 3
}

7. 指针和函数

• 可以用指针作为函数参数,实现“地址传递”,允许函数修改外部变量
• 可以返回指针,也可以用指针数组、指向函数的指针等。
示例:

void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}
int x = 1, y = 2;
swap(&x, &y); // x=2, y=1

8. 指针配合数组和函数的案例

数组求和函数:

int sum(int* arr, int size) {int total = 0;for (int i = 0; i < size; ++i) {total += *(arr + i);}return total;
}int main() {int arr[5] = {1, 2, 3, 4, 5};std::cout << sum(arr, 5) << std::endl; // 输出15return 0;
}	

9. 其他注意事项

• 指针可以指向任意类型,包括自定义类型、结构体等。
• 指针运算需谨慎,避免越界和非法访问。
• C++11推荐使用nullptr代替NULL。

总结:

• 指针是C++强大但需谨慎使用的特性,能高效操作内存和实现复杂数据结构。
• 正确初始化、使用const、避免野指针和空指针,是安全使用指针的关键。

相关文章:

  • 计算机网络 期末实训 eNSP 校园网
  • AI 在智慧农业领域的 10 大应用:从作物监测到精准营销
  • React前端与React Native移动端开发须知差异
  • NLP学习路线图(四十九):spaCy
  • 第二届图像处理、机器学习与模式识别国际学术会议(IPMLP 2025)
  • 支持 TDengine 的数据库管理工具—qStudio
  • 细说STM32单片机SPI-Flash芯片的FatFS移植
  • Kafka Connect生产实践:性能优化与高可用架构构建
  • 基于深度学习的智能图像增强技术:原理、实现与应用
  • 2024 CKS题库+详尽解析| 5. 日志审计
  • 卷积神经网络(CNN)图像识别基础教程
  • 计算机网络-----详解网络原理TCP/IP(下)
  • UDP访问DNS
  • FPGA基础 -- Verilog语言要素之系统任务和系统函数
  • C++11 User-Defined Literals:从入门到精通
  • java 设计模式_行为型_22模板模式
  • web项目部署配置HTTPS遇到的问题解决方法
  • 【友加畅捷】T1飞跃版账套隐藏设置
  • 数据赋能(280)——过程管理——反馈机制
  • Spring 框架核心功能全解
  • 网站建设内部风险分析/百度指数明星人气榜
  • 怎么做算命网站/成人用品网店进货渠道
  • 住房城乡建设部网站首页/西安网站定制开发
  • 设计兼职接单平台/专业百度seo排名优化
  • 公司网站建设考核/某企业网站的分析优化与推广
  • 济南开发网站/长春seo外包