簡體   English   中英

如何設計一個可以輕松返回數組長度的函數?

[英]How can I design a function that can return the length of an array easily?

我想設計一個可以輕松返回數組值的函數。 但是我遇到了一些問題。 在函數getArrayLen()的 return 語句中, sizeof(array)的值似乎是 4,這顯然是錯誤的。 但是如果我在主函數中使用sizeof(people) ,它返回 300,這是正確的。 我想知道為什么? 我知道sizeof(array)返回 4 因為“array”是一個指針,但sizeof(people)的“people”不是一個指針嗎?

#include <iostream>
#include <string>
using namespace std;

template <class T>
int getArrayLen(T& array)
{
    cout << "size of array: " << sizeof(array) << endl;
    cout << "size of array[0]: " << sizeof(array[0]);
    return (sizeof(array) / sizeof(array[0]));
}

struct Person
{
    string name;
    int age;
    string sex;
};

void test(Person arr[])
{
    int length = getArrayLen(arr);
}

int main() 
{
    Person people[5] =
    {
        {"John",23,"Male"},
        {"Alan",22,"Male"},
        {"Alex",20,"Male"},
        {"James",21,"Male"},
        {"Lucy",19,"Male"}
    };
    test(people);

    return 0;
}

如何設計一個可以輕松返回數組長度的函數?

您可以使用從數組參數中推導出大小的函數模板。 然而,沒有必要設計這樣的模板,因為標准庫已經提供了一個: std::size

sizeof(array)的值好像是4,這顯然是錯誤的。 但是如果我在主函數中使用 sizeof(people) ,它返回 300,這是正確的。 我想知道為什么?

那是因為array盡管它的名字和聲明看起來像,但它不是一個數組。 函數參數永遠不是數組。

參數是一個指向數組元素的指針。 您的函數不能用於使用指向數組元素的指針來獲取數組的大小。

但 sizeof(people) 中的“people”不也是一個指針嗎?

不, people不是指針。 它是一個數組。

只需修復函數: getArrayLen & test到一般函數:

    template <class T>
    int getArrayLen(const T& array) {
        return sizeof(T);
    }

    template <class T>
    void test(const T& array)
    {
        int length = getArrayLen(array);
        cout << length << endl;
    }

結果:

    300

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM