首页 > 编程语言 >C/C++指针的概念

C/C++指针的概念

时间:2024-10-21 19:17:09浏览次数:9  
标签:指向 int C++ 概念 内存 ptr 指针

           指针作为C/C++中一个重要的概念,是每个C/C++程序员必备技能,今天就来说说它。

一、指针的概念

指针是一种变量,它存储的是另外一个变量的内存地址。在C/C++中,通过指针可以间接访问和操作内存中的数据。例如:

int num = 0;

int *ptr = #

这里 ptr 是一个指向 int 类型的指针,它存储了变量 num 的地址。

二、指针的作用

1.动态分配内存

        通过指针可以在程序运行时动态地分配内存,使用 malloc 、calloc 、 realloc 和 free 等函数来管理动态内存。例如:

        int *p = (int *)malloc(sizeof(int));

可以在运行时分配一块足够存储一个整数的内存空间,并将其地址赋值给指针 p 。

2.传递大型数据结构

        当需要传递大型数据结构(如结构体或类)时,传递指针比传递整个数据结构更高效,因为只需要传递一个地址,而不是复制整个数据结构的内容。

3.实现数据结构

        指针在实现链表、树、图等数据结构中起着关键作用。通过指针可以将不同的节点连接起来,构建复杂的数据结构。

三、注意事项

1.初始化指针

        指针在使用前应该被初始化,否则它可能指向任意的内存地址,导致未定义的行为。可以将指针初始化为NULL或者指向一个有效的内存地址。例如:

        int* ptr = NULL;

2.避免悬空指针和野指针

        悬空指针是指向的内存已经被释放,但是指针任然存在的情况。野指针是指未初始化或者指向位置内存地址的指针。

        为了避免悬空指针,在释放内存后应该将指针设置为 NULL。在使用指针之前,应该检查指针是否为 NULL。例如:

        int *p = (int *)malloc(sizeof(int));

        free(p);

        p = NULL;

3.指针的类型匹配

        指针的类型应该与它所指向的变量的类型相匹配。如果指针的类型与所指向的变量的类型不匹配,就可能会导致错误的内存访问。例如:

        int num = 10;

        char *ptr = (char* )#

在这种情况下,指针 ptr 指向的是一个 int 类型的变量,但它被声明为 char 类型的指针,可能会导致错误的内存访问。

4.指针的算术运算

        在C/C++中,可以对指针进行算数运算,如加减法和比较。但是,指针的算数运算应该谨慎使用,确保不会超出所指向的内存范围。例如:

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

        int *ptr = arr;

        ptr++;

这里指针 ptr 指向数组 arr 的第一个元素,然后进行加法运算,于是指针 ptr 现在指向数组的第二个元素。

5.指针与数组的关系

        在C/C++中,数组名可以看做是一个指向数组第一个元素的指针。但是,数组名和指针也有一些区别,比如数组名是常量不能被修改,而指针是变量可以被修改。例如:

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

        int *ptr = arr;

        ptr++;

        这里 ptr 是一个指针可以被修改,而 arr 是一个数组名不能被修改。

6.多级指针

        C/C++中可以有多级指针,就是用一个指针指向另一个指针。在使用多级指针的时候,需要注意内存的管理和指针的解引用顺序,避免错误的内存访问。例如:

        int num = 10;

        int *ptr1 = #        //指针1

        int **ptr2 = &ptr1;        //多级指针指向指针1

        这里 ptr2 是一个指向 ptr1 的指针.

总而言之,在使用C/C++指针时,需要谨慎操作,确保正确的管理内存和访问数据,以避免出现未定义的行为和错误。

标签:指向,int,C++,概念,内存,ptr,指针
From: https://blog.csdn.net/qq_59840326/article/details/143123441

相关文章

  • 数组的概念(C++)
        今天介绍一下数组。在C++中,数组就是一种用于存储相同类型元素的容器,也是一种数据结构,在编程中被广泛使用。一、定义与组成    数组是由相同类型的元素组成的集合,这些元素在内存中是连续存储的。例如,一个整数数组可以存储多个整数,一个字符数组可以存储......
  • C++程序设计基础实验1
    任务一:源代码task1.cpp#include<iostream>#include<string>#include<vector>#include<algorithm>usingnamespacestd;//声明//模板函数声明template<typenameT>voidoutput(constT&c);//普通函数声明voidtest1();voidtest2();void......
  • C++研发笔记4——C语言程序设计初阶学习笔记2
            从今天开始我们开始第二模块初识C语言的学习,在本模块中我们将会涉及到一下14个内容:什么是C语言、第一个C语言程序、数据类型、变量、常量、字符串+转义字符+注释、选择语句、循环语句、函数、数组、操作符、常见关键字、define定义常量和宏、指针......
  • HTTP和HTTPS基本概念,主要区别,应用场景
    HTTP和HTTPS是用于在网络中传输数据的协议,虽然它们的功能类似,但在安全性上存在显著差异。1. HTTP的基本概念定义:HTTP是一种无状态的、面向请求-响应的协议,用于客户端(如浏览器)和服务器之间传输超文本数据(HTML、CSS、JavaScript等)。工作原理:客户端向服务器发送请求,服务器处......
  • GCN(图卷积神经网络)中的**信息聚合**和传统聚类算法是不同的概念,尽管它们都涉及到将某
    GCN(图卷积神经网络)中的信息聚合和传统聚类算法是不同的概念,尽管它们都涉及到将某些对象的信息整合在一起。下面我将详细解释两者的差异:1.GCN中的信息聚合GCN中的信息聚合过程是节点级别的邻居信息融合,主要目的是通过图的拓扑结构更新节点的特征表示。每个节点通过其邻......
  • C++静态成员变量和静态成员函数的使用
    1.静态成员变量:定义在类中的静态成员,以static关键字初始化和成员变量区别:a.可以通过类名::变量名进行调用,可访问性还是由(public,private,protected)进行限制 例如下面的mystaitcClass::_id,protected属性内容无法直接进行访问,若要直接访问需要修改为public2.静态成员函数:类似可以通过......
  • 07安装过程中的基本概念
    每天五分钟学Linux|第七课:安装过程中的基本概念大家好!欢迎再次加入我们的“每天五分钟学Linux”系列教程。在之前的课程中,我们介绍了如何使用LiveCD/USB来体验Linux。今天,我们将进一步深入,讲解在安装Linux过程中的一些基本概念,如分区和文件系统等。理解这些概念对于顺利......
  • 我在大厂做 CR——如何体系化防控空指针异常gj
    合集-卓越工程(4)1.为什么需要依赖注入10-072.我在大厂做CR——为什么建议使用枚举来替换布尔值10-163.我在大厂做CR——如何体系化防控空指针异常10-214.我在大厂做CR——再谈如何优雅修改代码10-07收起阅读目录什么是空指针异常CR我们要做什么再谈空指针防控手段写在......
  • 集合基本概念
    集合1、集合与元素集合:由一个或多个确定的元素所构成的整体,是指具有某种特定性质的具体的或抽象的对象汇总而成的集体。元素:构成集合的这些对象则称为该集合的元素。例如,全中国人的集合,它的元素就是每一个中国人。例如,{1,3,5}是一个集合,3是该集合的元素。2、空集有一类......
  • 高效并行计算:使用C++中的std::thread实现多线程编程
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在现代计算中,随着多核处理器的普及,如何充分利用硬件资源以提升程序性能成为关键问题之一。C++标准库提供了丰富的多线程支持,其中std::thread是用于实现并发计算的核心工具之一。通过合理的多线程设计,程序可以实现......