zl程序教程

您现在的位置是:首页 >  后端

当前栏目

如何在不使用 sizeof 的情况下在 C\u002FC++ 中找到数组的大小?

C++数组 使用 如何 大小 情况 找到 sizeof
2023-06-13 09:15:05 时间

theme: channing-cyan highlight: a11y-dark


「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

  • 难度等级: 困难

我们可以使用 sizeof 运算符找到数组的大小,如下所示。

// 查找 arr[] 的大小并存储在 'size'
int size = sizeof(arr)/sizeof(arr[0]);

我们可以在不使用 sizeof 运算符的情况下做同样的事情吗?

方法一(自己写sizeof) 给定一个数组(你不知道数组中元素的类型),不使用sizeof运算符,求数组中元素的总数?

一个解决方案是我们自己写的sizeof操作符

// C++ 程序通过编写我们的 sizeof 来查找数组的大小
#include <bits/stdc++.h>
using namespace std;

// 用户定义的大小宏
# define my_sizeof(type) ((char *)(&amp;type+1)-(char*)(&amp;type))

int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6};
    int size = my_sizeof(arr)/my_sizeof(arr[0]);

    cout << "Number of elements in arr[] is "
        << size;

    return 0;
}

输出 :

Number of elements in arr[] is 6

方法 2(使用指针 hack) 与上述解决方案相比,以下解决方案非常简短。可以使用表达式找出数组 A 中的元素数

int size = *(&amp;arr + 1) - arr;
// C++ 程序通过使用指针 hack 来查找数组的大小。
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6};
    int size = *(&amp;arr + 1) - arr;
    cout << "Number of elements in arr[] is "
        << size;
    return 0;
}

输出 :

Number of elements in arr[] is 6

这是如何运作的? 在这里,指针算术发挥了它的作用。我们不需要将每个位置显式转换为字符指针。

&arr ==> 指向 6 个元素的数组的指针。 [见本对之间&的常用3差 和ARR]

(&arr + 1) ==> 的为6点的整数地址 指针类型是指针阵列 的6点的整数。

*(&arr + 1) ==> 与 (&arr + 1) 的地址相同,但 指针类型为“int *”。

*(&arr + 1) - arr ==> 由于 *(&arr + 1) 指向 地址 arr 前面6 个整数,因此两者的差 为 6。

文章到这里就结束了,感谢各位的阅读,如有不正确的地方欢迎大家批评指正!