📜  如何在不使用sizeof的情况下在C C++中查找数组的大小?(1)

📅  最后修改于: 2023-12-03 15:08:59.938000             🧑  作者: Mango

在C/C++中查找数组大小的方式

在C/C++中,我们可以使用sizeof操作符来获取数组的大小,但是如果我们不想使用这个操作符,还有其他的方式来获取数组的大小。本文将为大家介绍三种常见的方法。

1. 使用指针计算数组大小

可以使用指针的加减运算来计算数组的大小。具体步骤如下:

  1. 定义一个指针,指向数组的第一个元素。
int arr[10];
int *p = &arr[0];
  1. 定义一个变量,表示数组的大小。
int size = 0;
  1. 遍历数组,每遍历一个元素,将大小加1。
while (*p)
{
    size++;
    p++;
}

完整代码如下:

#include <stdio.h>

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

    int *p = &arr[0];

    int size = 0;

    while (*p)
    {
        size++;
        p++;
    }

    printf("The size of the array is %d\n", size);

    return 0;
}
2. 使用宏定义计算数组大小

我们可以定义一个宏来计算数组的大小,具体实现如下:

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

这个宏定义中,sizeof(arr)表示整个数组的大小,sizeof((arr)[0])表示数组中一个元素的大小,两者相除即可得到数组的大小。

完整代码如下:

#include <stdio.h>

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

    int size = ARRAY_SIZE(arr);

    printf("The size of the array is %d\n", size);

    return 0;
}
3. 使用模板计算数组大小

在C++中,我们可以使用模板来计算数组的大小,具体实现如下:

template<typename T, size_t N>
size_t array_size(T(&)[N])
{
    return N;
}

这个模板函数中,T表示数组元素的类型,&表示传递的是一个数组的引用,而不是一个指针,N表示数组的大小,使用sizeof操作符可以获取到。

完整代码如下:

#include <iostream>

template<typename T, size_t N>
size_t array_size(T(&)[N])
{
    return N;
}

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

    int size = array_size(arr);

    std::cout << "The size of the array is " << size << std::endl;

    return 0;
}

以上就是在C/C++中计算数组大小的三种方式,希望可以帮助到大家。