首页 > 编程语言 >C/C++中的指针详解(重点)

C/C++中的指针详解(重点)

时间:2024-10-31 16:50:08浏览次数:3  
标签:arr 指向 int C++ 详解 内存 指针

指针是C和C++中一个重要且强大的特性。它们允许程序员直接访问和操作内存,提供了灵活的内存管理和高效的数据结构实现。

对一个变量取*操作其实就是取到这个变量的地址,然后再对取到的变量进行读写等操作

以下是对指针的详细介绍:

1. 什么是指针

指针是一个变量,它存储另一个变量的地址。通过指针,我们可以间接访问和修改存储在该地址的值。

2. 指针的定义

指针的定义语法如下:

类型 *指针变量名;

例如:

int *p;  // p是一个指向int类型的指针

3. 指针的初始化

指针可以通过取地址运算符&来初始化。例如:

int a = 10; int *p = &a; // p指向a的地址

4. 指针的使用

  • 解引用:使用*运算符来访问指针指向的值。
int value = *p; // 通过指针p获取a的值
  • 修改值:可以通过指针修改其指向的变量的值。
*p = 20; // 将a的值修改为20

5. 指针运算

指针可以进行一些算术运算:

  • 加法:指针加一个整数,会向前移动该类型大小的字节数。
int arr[] = {1, 2, 3}; int *p = arr; // p指向arr的第一个元素 p++; // 现在p指向arr的第二个元素
  • 减法:同样,指针减去一个整数,会向后移动。

6. 指针与数组

指针和数组之间有紧密的联系:

  • 数组名本身就是一个指针,指向数组的第一个元素。
int arr[] = {1, 2, 3}; int *p = arr; // p指向arr的第一个元素
  • 可以使用指针来遍历数组:
for (int i = 0; i < 3; i++) { printf("%d ", *(p + i)); // 输出1 2 3 }

7. 指向指针的指针(多级指针)

指针还可以指向其他指针,称为指向指针的指针:

int **pp; // pp是一个指向int指针的指针

8. 动态内存分配

指针通常与动态内存管理结合使用,通过new(C++)或malloc(C)进行内存分配:

int *p = new int; // C++ *p = 10; int *arr = (int *)malloc(3 * sizeof(int)); // C

9. 指针的类型

指针的类型与它所指向的数据类型相对应。不同类型的指针不可以直接相互赋值。

10. 注意事项

  • 野指针:指针未初始化或指向已经释放的内存,可能导致未定义行为。
  • 内存泄漏:动态分配的内存需要使用delete(C++)或free(C)释放,避免内存泄漏。
  • 指针越界:访问指针指向范围之外的内存可能导致程序崩溃。

结论

指针是C/C++中一个强大且复杂的工具,正确使用指针可以极大地提高程序的灵活性和性能。然而,错误的使用可能导致难以追踪的错误,因此在使用时需特别小心。

标签:arr,指向,int,C++,详解,内存,指针
From: https://blog.csdn.net/A2051755849/article/details/143401140

相关文章

  • 【C++】01-C++ 程序的生成过程
    概要:该篇文章以MSCV为例,简要介绍了C++程序的生成过程。1.生成工具MSVC,全称MicrosoftVisualC++,是由微软开发的用于生成C++程序的工具集,包括C++预处理器、编译器、链接器和其他生成工具。2.生成过程2.1预处理(Preprocess)预处理由预处理器(Preprocessor)......
  • android OpenGL ES详解——双缓冲区、默认缓冲区和帧缓冲区
    目录一、双缓冲1、概念2、如何使用1、初始化双缓冲2、绘制操作3、交换缓冲区3、优势1、避免屏幕闪烁2、提高渲染效率3、优化资源利用4、注意事项1、内存使用2、交换时间3、同步问题二、默认缓冲1、概念2、如何使用1、渲染操作2、显示操作3、交换缓冲3、注......
  • 汉诺塔问题详解
    汉诺塔游戏规则在一根柱子上从下往上按照大小顺序放置一定数量的圆盘,有三根柱子,把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。该问题可以理解为,先将有圆盘的柱子上的n-1个圆盘放到辅助柱上,再将最......
  • C++ halcon判断图像是否为空
    使用CountObj函数首先,可以使用CountObj函数来检查当前图像是否为空。如果图像为空,则返回的计数为0;否则,返回的计数大于0。示例代码如下:cppCopyCode HTuplehNum;HalconCpp::CountObj(m_hCurrentImg,&hNum);if(hNum==0){qDebug()<<"传入图像为空!";}else{qDebu......
  • 指针--结构体指针
    结构体:新的类型(由任意若干个基本类型组成)a1,a2,a3是AA这个结构体类型的个体,每个个体都有AA这个结构体里面的两个部件嵌套调用,结构体嵌套数组里的元素就是结构体child类型的数据x4是结构体AA类型的,a1,a2,a3也是结构体AA类型的,同一类型可以相等只看变量声名的时候是无法判......
  • Python工具箱系列:Pandas 数据清洗与预处理详解
    目录一、数据清洗与预处理的重要性二、Pandas简介三、Pandas数据清洗与预处理技巧1.读取数据2.查看数据3.处理缺失值4.处理重复值5.处理异常值6.处理数据类型不一致7.处理数据格式不一致8.数据标准化和归一化9.数据编码四、案例:使用Pandas进行数据清......
  • Python数据类型之自定义类型——Class与面向对象编程详解
    目录引言一、面向对象编程基础二、类的定义与对象的创建三、封装性四、继承性五、多态性六、特殊方法与数据类七、使用dataclass装饰器八、面向对象编程的优势结论引言Python是一门功能强大的编程语言,其面向对象编程(OOP)的特性更是为开发者提供了极大的灵活性和......
  • 【C++】红黑树的插入与删除
    第一篇数据结构学习之红黑树的实现系列文章目录前言一、红黑树的基本概念二、参考视频链接三、代码实现1.定义节点类2.旋转方法3.红黑树插入操作4.红黑树删除操作四,总体代码总结系列文章目录第一篇数据结构学习之红黑树的实现前言红黑树是一种平衡二叉搜索树,在......
  • Zipkin使用指南分布式追踪核心概念与架构详解
    1.简介什么是ZipkinZipkin是一个分布式追踪系统,主要用于监控和分析微服务架构中的调用链路。它帮助开发者和运维团队深入理解服务调用路径,从而识别性能瓶颈、异常或故障点。Zipkin最初是由Twitter开源的,当前已成为微服务追踪的流行解决方案,特别是在SpringCloud、Kuberne......
  • C++——写一函数,将一个3x3的整型矩阵转置。用指针或引用方法处理。
    没注释的源代码#include<iostream>usingnamespacestd;voidmove(int*p);intmain(){  inta[3][3],*p;  cout<<"pleaseinputmatrix:"<<endl;  for(inti=0;i<3;i++)  {    for(intj=0;j<3;j++)    {     ......