当在对象名称后使用带[]的类对象时,您究竟传递了什么? C ++ [关闭]

问题描述 投票:-4回答:3

我很好奇,当使用类对象作为参数,并在其后使用数组括号时,您到底传递了什么。我正在谈论的格式是

class Class {};

//This is just an example
void Function( int x, int y, Class particles[] ) {
    //algorithm here
}
c++ arrays function parameter-passing declaration
3个回答
1
投票

具有数组类型的函数参数由编译器隐式调整为指向数组元素类型的指针。

例如,这些函数声明

void f( T a[] );
void f( T a[1] );
void f( T a[100] );

其中T是任意类型,例如

class Class
{
    //…
};

声明与声明相同的一个函数

void f( T *a );

您可以将所有这些声明包含在一个编译单元中,尽管编译器可以发出警告,声明这些声明是多余的。

另一方面,传递给此类函数的数组又隐式转换为指向其第一个元素的指针。

当然,您甚至可以将指向单个对象的指针传递给此类函数,而不是将数组指定为参数,因为在任何情况下,该函数都会处理指针。

这里是演示程序。

#include <iostream>

class Class
{
public:
    int x = 10;
};

void f( Class object[] );

//  The definition of the above function
void f( Class *object )
{
    std::cout << object[0].x << '\n';
}

int main() 
{
    Class object;
    Class objects[10];

    f( &object );
    f( objects );

    return 0;
}

其输出为

10
10

-2
投票

当将数组传递给函数时,实际上是在传递指针(因为数组本质上是指针)。


-2
投票

首先,它称为参数。从技术上讲,它对于其他程序语言(如python&java)具有相同的功能。如果您不重视任何价值,它就不会“传递”任何东西。如果您坚持编程,将可以使用它很多。

并且从技术上讲,它有点读[0],因此它同时将值umm传递为0。但是我们实际上并没有这样阅读,

© www.soinside.com 2019 - 2024. All rights reserved.