如何在C++中不使用sizeof()运算符找到数组的大小
在C ++中,我们使用 _sizeof() _ 运算符查找所需数据类型,变量和常量的大小。 它是一个编译时执行运算符。 我们可以使用 _sizeof() _ 运算符找到一个数组的大小,如下所示:
//找到arr[]的大小并将其存储在“size”中
int size = sizeof(arr)/ sizeof(arr [0]);
没有使用sizeof()运算符查找数组大小的方法
给定一个数组(您不知道数组中的元素类型),在不使用sizeof()运算符的情况下找到数组中的元素总数。 因此,我们可以使用下面提到的方法:
- 使用指针技巧
- 使用自己制作的sizeof()
- 使用模板函数
- 使用宏函数
- 使用哨兵值
- 使用类或结构
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