首页 > 编程语言 >C++ 彻底搞懂指针(3)

C++ 彻底搞懂指针(3)

时间:2024-07-03 18:28:37浏览次数:20  
标签:arr int C++ 数组名 value 数组 搞懂 指针

1. 数组指针、二维数组指针、字符串指针

1.1 定义一个数组指针

前面说过,指针变量存放的是地址,它可以存放普通变量的地址,可以存放另一个指针变量的地址,当然也可以存放数组、结构体、函数的地址。

如果一个指针指向了数组,就称它为数组指针,比如下面的代码就定义了一个指针 p 指向数组 arr:

 

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

int *p = arr;

在这里发现,定义一个元素类型为 int 的数组指针和定义一个指向int变量的指针的写法是一样的!

数组指针是指向数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关,在上面的例子中,arr 数组的元素是 int 类型,所以 p 的类型也要是 int* 类型。

其实指针 p 并不知道它指向的是一个数组,p 只知道它指向的是一个整数,究竟如何使用 p 取决于代码里面怎么写。

1.2 数组名的含义

在上面的代码中,直接将 arr 赋值给指针 p,这是因为数组名 arr 可以被当作是一个指针常量,就是数组第一个元素的地址,在大多数使用数组名的表达式中,数组名就被当作一个指针常量,比如下面这个例子:

 

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

int value;

value = arr[0];   //也可以写成 value = *arr;

value = arr[1];   //也可以写成 value = *(arr+1);

value = arr[3];   //也可以写成 value = *(arr+3);

虽然 arr[1] 和 *(arr+1) 表示同一个意思,但是从可读性来看,使用下标看起来更舒服

但是存在例外,当使用 sizeof 时,数组名就不是指针常量的意思了,比如在下面的例子中,size1 的值为20,而 size2 的值为4。

 

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

int *p = arr;

int size1 = sizeof(arr); 

标签:arr,int,C++,数组名,value,数组,搞懂,指针
From: https://blog.csdn.net/GodJhin/article/details/140159617

相关文章

  • C++修改任务计划程序-电源条件
    介绍应用程序需要进行守护,又不想另外运行一个软件去实时监测应用程序是否退出了,退出就重启。在Windows上可以利用任务计划程序,达到守护进程的作用。创建任务计划在nsis脚本中可以直接使用schtasks命令来创建任务计划,以下是每分钟检测一次的脚本。nsExec::ExecToLog'schtask......
  • 新特性之C++14
    C++14是C++11的一个增量升级版本,虽然没有引入像C++11那样的大量新特性,但它通过对已有特性进行优化和扩展,提高了语言的可用性和性能。本文将详细介绍C++14引入和优化的新特性功能。概述C++14旨在修复C++11的一些缺陷,并提供了一些重要的增强功能,以简化开发者的日......
  • PointCloudLib alpha shapes算法提取平面点云边界 C++版本
    测试效果算法简介AlphaShapes算法是一种用于提取平面点云边界特征的方法,以下是对其原理和步骤的详细解释:1.AlphaShapes算法概述目标:从点云数据中提取曲面边界信息,通过计算点云中点的Alpha形状,获得边界特征。Alpha形状:一个可以描述几何体边界的参数。其计算基于一......
  • 一文彻底搞懂Transformer - Input(输入)
    一、输入嵌入(InputEmbedding)        词嵌入(WordEmbedding):词嵌入是最基本的嵌入形式,它将词汇表中的每个单词映射到一个固定大小的向量上。这个向量通常是通过训练得到的,能够捕捉单词之间的语义关系。        在Transformer中,词嵌入层通常是一个可学习的参......
  • 基于C++类与权限初识:银行系统
    功能:银行的账户是一个模板,是一个类,有存款人信息和账户额度,而具体的存款人视为一个对象,一个对象不能私自修改账户额度,需要通过一个操作流程,比如去ATM或者柜台进行操作才能修改到账户额度,所以,存款人信息和账户额度设计成私有权限,通过公有的操作流程,也就是公有函数去操作私有......
  • 聊聊C++20的三向比较运算符 `<=>`
    C++20标准引入了许多新特性,其中之一是三向比较运算符<=>,也被称为太空船运算符。这个新运算符为C++程序员提供了一种全新的比较对象的方式,它能有效简化比较逻辑,避免编写多个比较运算符重载的情况。为什么需要三向比较运算符?在C++20之前,如果要完整地定义一个类型的比较行为......
  • C++课程设计--学生宿舍管理系统
    需求分析        系统主要使用类链表,将链表的知识得到充分的使用;还是用到了函数重载。 类定义    主要包括学生类、宿舍类、报修类以及访客类。由于博主时间问题并没有写到访客类的代码,但是思路是一样的。学生类    数据成员:学生学号、姓名、性......
  • 丝滑解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_
    基础环境:MacOSm1、python=3.9前情提要:在Anaconda终端运行代码的时候,显示报错:importError:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:version`GLIBCXX_3.4.29'notfound1问题分析:根据提示是/usr/lib/x86_64-linux-gnu/路径下的libstdc++.so.6缺少版本GLIBCXX_3.4.29解......
  • C++学习1 “&”符号的用法
    “单纯来源于CHATGPT”一在C++中,&符号具有多重用途,主要包括以下几种情况:1.地址运算符当&用于变量前面时,它作为一种一元运算符,用来获取该变量在内存中的地址。例如:inta=5;int*p=&a;//p存储a的内存地址这里&a表示变量a的地址。2.引用声明在类型声明......
  • C++11——新特性超详细总结
    目录一、C++11介绍二·、为什么要用C++11三、新特性总结1、类型推导(auto/decltype)2、序列for循环语句3、lamdba表达式4、构造函数:委托构造和继承构造5、容器(array/forward_list)6、垃圾回收机制7、正则表达式基础7.1、符号7.2、速记理解技巧7.3、检验数字的表达式......