前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在不使用 sizeof 的情况下在 C\u002FC++ 中找到数组的大小?

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

作者头像
鲸落c
发布2022-11-14 16:42:33
7990
发布2022-11-14 16:42:33
举报
文章被收录于专栏:鲸落学习笔记鲸落学习笔记

theme: channing-cyan highlight: a11y-dark


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

  • 难度等级: 困难

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

代码语言:javascript
复制
// 查找 arr[] 的大小并存储在 'size'
int size = sizeof(arr)/sizeof(arr[0]);

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

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

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

代码语言:javascript
复制
// 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;
}

输出 :

代码语言:javascript
复制
Number of elements in arr[] is 6

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

代码语言:javascript
复制
int size = *(&amp;arr + 1) - arr;
代码语言:javascript
复制
// 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;
}

输出 :

代码语言:javascript
复制
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。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档