如何在C++中不使用sizeof()运算符找到数组的大小

如何在C++中不使用sizeof()运算符找到数组的大小

在C ++中,我们使用 _sizeof() _ 运算符查找所需数据类型,变量和常量的大小。 它是一个编译时执行运算符。 我们可以使用 _sizeof() _ 运算符找到一个数组的大小,如下所示:

//找到arr[]的大小并将其存储在“size”中
int size = sizeof(arr)/ sizeof(arr [0]);

没有使用sizeof()运算符查找数组大小的方法

给定一个数组(您不知道数组中的元素类型),在不使用sizeof()运算符的情况下找到数组中的元素总数。 因此,我们可以使用下面提到的方法:

  1. 使用指针技巧
  2. 使用自己制作的sizeof()
  3. 使用模板函数
  4. 使用宏函数
  5. 使用哨兵值
  6. 使用类或结构

1.使用指针技巧

与其他解决方案相比,以下解决方案是简洁的。可以使用以下表达式找到数组A中的元素数:

//&arr返回指针
int size = *(& arr + 1)- arr;

这是如何工作的?

这里指针算术完成工作。 我们不需要将每个位置显式地转换为字符指针。

  • **& arr ** - 指向6个元素的数组的指针。 [请参阅此处,了解&arr和arr之间的区别]
  • **( & arr + 1) ** - 指向6个整数地址,因为指针类型是指向6个整数的数组的指针。 简单地说,(&arr + 1)是整数前面的地址。
  • *(& arr + 1) - 与(& arr + 1)相同的地址,但指针类型为“ int *”。
  • *(& arr + 1)- arr - 由于*(& arr + 1)指向arr之前的6个整数的地址,因此两者之间的差异为6。

示例:

//C ++程序查找大小
//使用指针技巧查找数组的大小
#include <iostream>
using namespace std;
 
int main()
{
    int arr [] = {1,2,3,4,5,6};
    int size = *(& arr + 1) - arr;
    cout <<“ arr []中的元素数量为”<< size;
    返回0;
}  

输出

 arr []中的元素数量为6

2.实现自己的sizeof():

使用自定义用户定义的sizeof函数,它可以提供与sizeof()相同的功能。

示例:

//C ++程序找到
//用我们自己的sizeof操作符编写的数组的大小
#include <iostream>
using namespace std;
 
//用户定义的sizeof宏
#define my_sizeof(type) ((char*)(& type + 1) -(char*)(& type))
 
int main()
{
    int arr [] = {1,2,3,4,5,6};
    int size = my_sizeof(arr)/ my_sizeof(arr [0]);
 
    cout <<“ arr []中的元素数量为”<< size;
 
    返回0;
}  

输出

 arr []中的元素数量为6

要了解更多有关方法的信息,请参考implement our own sizeof。

3.使用模板函数:

我们可以使用模板函数查找数组的大小。

示例:

// C++ program to find size of an array
// using a class or struct
#include <iostream>
using namespace std;
 
// defining a struct that contains an array
struct Array {
    int arr[100];
 
    // member function to return size of the array
    int size() {
        return sizeof(arr) / sizeof(arr[0]);
    }
};
 
int main()
{
    // creating an object of struct Array
    Array a = {{1,2,3,4,5,6}};
 
    // finding size of the array
    int size = a.size();
 
    // printing size of the array
    cout << "Size of the array: " << size << endl;
    return 0;
}
 
// This code is contributed by Susobhan Akhuli```  

**Output** ```cpp Size of the array: 6
// C++程序,使用类或结构体查找数组大小
# include <iostream>
using namespace std;
 
class MyArray {
    private:
        int arr[100]; // 声明数组
        int size; // 数组大小
    public:
        void readArray(); // 读入数组元素值
        int getSize(); // 获取数组大小
};
 
void MyArray::readArray() {
    size = 0; // 初始化大小为0
    while (size < 100) {
        cout << "请输入第 " << size << " 个元素的值(或输入-1结束): ";
        cin >> arr[size];
        if (arr[size] == -1) {
            break; // 当输入-1时结束循环
        }
        size++; // 每输入一个元素大小加1
    }
}
 
int MyArray::getSize() {
    return size; // 返回数组大小
}
 
int main() {
    MyArray a; // 声明一个 MyArray 对象
    a.readArray(); // 读入数组元素值
    int size = a.getSize(); // 获取数组大小
    cout << "数组大小: " << size << endl; // 输出数组大小
    return 0;
}

输出:

请输入第 0 个元素的值(或输入-1结束): 8
请输入第 1 个元素的值(或输入-1结束): 4
请输入第 2 个元素的值(或输入-1结束): 2
请输入第 3 个元素的值(或输入-1结束): 7
请输入第 4 个元素的值(或输入-1结束): 5
请输入第 5 个元素的值(或输入-1结束): 6
请输入第 6 个元素的值(或输入-1结束): -1
数组大小: 6

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程