首页 > 编程语言 >C++(函数参数为数组与指针算术)

C++(函数参数为数组与指针算术)

时间:2024-07-16 16:51:53浏览次数:13  
标签:arr 指向 int C++ 函数参数 数组 指针

目录

#include <iostream>

void printArray(int arr[], int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
}

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    printArray(arr, 5); // 传递的是指针和数组大小

    return 0;
}

1. 函数参数为数组

在C++中,当我们定义一个函数参数为数组时,比如 void printArray(int arr[], int size),数组参数 int arr[] 实际上被解释为指向数组第一个元素的指针,即 int* arr。这是因为在C++中,函数参数不能真正地是数组,数组参数会自动退化为指向其第一个元素的指针。这种行为称为“数组退化为指针”。因此,在函数 printArray 中,int arr[]int* arr 是等价的。



2. 指针算术

2.1 arr 是指向第一个元素的地址

当你传递数组 arr 给函数 printArray 时,传递的实际上是指向数组第一个元素的指针。对于数组 int arr[5] = {1, 2, 3, 4, 5};,数组名 arr 在传递时等价于指针 &arr[0],即数组第一个元素的地址。


2.2 arr[i] 表示什么?

printArray 函数中,当你使用 arr[i] 时,C++ 编译器会将其解释为指针算术和解引用操作。具体来说:

  • arr 是一个指向 int 类型的指针,指向数组的第一个元素。
  • i 是一个整数索引,用于访问数组中的元素。

表达式 arr[i] 可以分解为以下步骤:

  1. 指针算术:arr + i 计算指针 arr 加上偏移量 i。由于 arr 是一个 int* 类型的指针,加上 i 后得到一个新的指针,指向数组中的第 i 个元素。指针算术会自动根据指针类型调整偏移量。例如,如果 arrint* 类型,每次增加 1 意味着增加 sizeof(int) 字节。
  2. 解引用:*(arr + i) 解引用该指针,访问指针所指向的内存位置的值,即数组中的第 i 个元素。

所以,arr[i] 实际上等价于 *(arr + i)



标签:arr,指向,int,C++,函数参数,数组,指针
From: https://www.cnblogs.com/keye/p/18305630

相关文章

  • C++题解(7) 信息学奥赛一本通:1055:判断闰年
    【题目描述】判断某年是否是闰年。如果公元a年是闰年输出Y,否则输出N。【输入】输入只有一行,包含一个整数a(0<a<3000)。【输出】一行,如果公元a年是闰年输出Y,否则输出N。【输入样例】2006【输出样例】N【知识链接:如何判断闰年】(1)能被4整除,但不......
  • C++题解(6) 信息学奥赛一本通:2069:【例2.12 】糖果游戏
    【题目描述】某幼儿园里,有5个小朋友编号为1、2、3、4、5,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留一份,其余两份分给他的相邻的两个小朋友。......
  • 【C++】链表相关的项目(2.0)
    链表相关的项目1.0需要请点击       ---------------------------------------------------准备工作首先弄几个可能会需要的头文件:#include<stdio.h>#include<stdlib.h>#include<string.h>typedefintADT;//定义自定义数据类型​​因为写的是关于......
  • C++11平凡可复制类型检测is_trivially_copyable
    1.C++基础回顾     在C++11中,平凡类型(TrivialType)、平凡可复制类型(TrivialCopyable)、标准布局类型(Standard-layoutType)是描述类在内存中布局特性的术语,它们与类的构造、拷贝、赋值和销毁行为有关,也影响着类的内存布局和对齐方式。下面用通俗的语言解释这些概念:1.1.平......
  • C++获取当前毫秒数
    转自https://www.cnblogs.com/c9080/p/17509268.html,在C++11中,可以使用<chrono>头文件中的std::chrono::system_clock类来获取当前时间戳。它提供了多种精度和分辨率的时钟类型,其中最常用的是系统时钟。以下是一个示例程序,演示如何使用std::chrono::system_clock类获取......
  • C++ 用智能指针这样包装 this 指针是否可行
    #include<iostream>#include<memory>usingnamespacestd;classA;classB{public:B(shared_ptr<A>a){pa=a;cout<<"B构造..."<<endl;}~B(){cout<<&quo......
  • C++游戏篇1“很好的游戏,使我手指旋转”(原创)
    话不多说,上代码!#include<bits/stdc++.h>#include<windows.h>usingnamespacestd;intGe,Fen,timp,F,a[22][6];doubleShi,B;voidS(intForgC,intBackC){WORDwColor=((BackC&0x0F)<<4)+(ForgC&0x0F);SetConsoleTextAttribute(GetS......
  • C++转换进制
    前言本蒟蒻:让C++转进制?我都不会转,更何况让C++转。正文转进制,我们要知道36进制的0-35都用什么表示。0-9就是0-9,而10-35分别是ABCDEFG........RSTUVWXYZ。我们可以设一个字符串表示0-35:strings="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";重要的一步来了,参考以下方法,用while......
  • 底软驱动 | 大厂面试爱考的C++内存相关
    文章目录C++内存相关C++内存分区C++对象的成员函数存放在内存哪里堆和栈的区别堆和栈的访问效率“野指针”有了malloc/free为什么还要new/deletealloca内存崩溃C++内存泄漏的几种情况内存对齐柔性数组参考推荐阅读C++内存相关本篇介绍了C++内存相关的知识。C++......
  • 虚函数表 和 虚函数指针
     虚函数指针vptr大小x86平台下为4个字节,x64平台下为8个字节例题:涉及内存对齐 答案:32位miaoage=264位miaoage=1核心在这句话上p【1】=q【1】;由于两个子类都继承自有虚函数的基类因此都带有虚表指针首先基类中只有一个int432位下,虚表指针也是4......