数组C++的大小

toi*_*toi 10 c++ arrays size

可能重复:
作为参数传递的Sizeof数组

我想知道为什么以下代码的输出是1和9.这是因为函数大小中未声明的数组?如何将"数组大小"分离为函数?

#include "stdafx.h"
#include <iostream>
using namespace std;

int size(int a[])
{
    return sizeof a/sizeof a[0];
}

int main()
{   
    int a[] = {5,2,4,7,1,8,9,10,6};
    cout << size(a) << endl;
    cout << sizeof a/sizeof a[0] << endl;
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*oun 11

当你写的size(a)时候,你传递的是指针,而不是数组.由于指针的大小和int被4或8(取决于ABI),将得到sizeof(int *)/sizeof int(4/4 = 1为32位机器和8/4 = 2 64位的),其为12.

在C++中,当一个数组作为参数传递给一个函数时,实际上你正在传递一个指向数组的指针.


log*_*og0 7

Maroun85答案是对的.这不是很明显,但aint size(int a[])是一个指针.

但是你为什么不用c ++方式呢.用std::vectors

std::vector<int> a = {5,2,4,7,1,8,9,10,6};
cout << a.size() << endl;
Run Code Online (Sandbox Code Playgroud)

这里没有招数

- 编辑

如果您的编译器不支持c ++ 11.你可以做:

std::vector<int> a;
a.push(5);
a.push(2);
...
cout << a.size() << endl;
Run Code Online (Sandbox Code Playgroud)


mat*_*975 5

您的size()函数无法像您希望的那样工作,因为当您将数组传递给函数时,数组会衰减到指向其第一个元素的指针.你a衰变到int*一个指针,sizeof操作符返回指针的大小,而不是数组.考虑使用std::vector<int>替代,因为这将允许您在每次将其传递给函数时检索向量的大小.


Syn*_*xis 5

将数组传递给函数时,它们会衰减为指针。所以,你的size()功能相当于:

int size(int* a)
{
    return sizeof a/sizeof a[0];
}
Run Code Online (Sandbox Code Playgroud)

Andsizeof a是指针的大小,与这里的 int 大小相同,因此是输出。