C++中使用 sizeof 函数取得数组大小

本文通过两个示例展示了如何使用指针遍历C++中的浮点数数组,包括利用数组长度和特殊结束标记的方法。

代码如下:

#include <iostream>

float dues[] =
{
     30.01,
     55.02,
    100.03
};

int main()
{
    float* dp = &dues[0];

    int count = sizeof(dues)/sizeof(float);

    for (int i = 0; i < count; i++)
        std::cout << *(dp+i) << std::endl;

    return 0;
}

如果知道数组中的结束符,我们还可以这么写:

#include <iostream>

float dues[] =
{
    30.01,
    55.02,
    100.03,
    -1
};

int main()
{

    float* dp;

    for (dp = dues; *dp != -1; dp++)
    	std::cout << *dp << std::endl;

    return 0;
}

在C/C++中,可使用`sizeof`函数获取数组长度。在主函数中直接使用`sizeof`计算数组长度,公式为:数组长度 = `sizeof(数组名)` / `sizeof(数组名[0])` 。例如: ```cpp #include <iostream> #define Array_size(array) sizeof(array)/sizeof(array[0]) int main() { int arr[] = { 1,2,3,4,5,6,7,8,9}; std::cout << "数组arr长度:" << Array_size(arr) << std::endl; std::cout << "数组arr内存大小:" << sizeof(arr) << std::endl; return 0; } ``` 此代码定义了宏常量`Array_size`来计算数组长度,输出数组`arr`的长度和内存大小 [^1]。 也可以使用以下几种等效表达式来获取数组长度: ```cpp #include <iostream> int main() { int array[] = {5,2,4,6,1,3}; int length1 = sizeof(array)/sizeof(*array); int length2 = sizeof(array)/sizeof(array[0]); int length3 = sizeof(array)/sizeof(int); std::cout << "length1: " << length1 << std::endl; std::cout << "length2: " << length2 << std::endl; std::cout << "length3: " << length3 << std::endl; return 0; } ``` 上述代码中的`length1`、`length2`、`length3`三种计算方式都能正确得出数组`array`的长度 [^4]。 不过,当数组作为参数传递给子函数时,不能直接在子函数内用`sizeof`获取数组长度。因为数组作为参数传递时会退化为指针,`sizeof`获取的是指针大小,而非数组大小。例如: ```cpp #include <stdio.h> int getLength(int array[]) { int length; length = sizeof(array)/sizeof(array[0]); return length; } int main() { int array[] = {1, 2, 3, 4, 5}; int len = getLength(array); printf("The length of array is %d\n", len); return 0; } ``` 此代码中在`getLength`函数里用`sizeof`获取数组长度会出错 [^2]。 解决方法有两种:一是自定义函数新增一个形参,传参时将数组长度也传入;二是使用宏定义。正确示例如下: ```cpp #include <stdio.h> #define length sizeof(data)/sizeof(data[0]) int search(int data[], int target, int length) { int i; for (i = 0; i < length; i++) { if (data[i] == target) { printf("%d", i); return i; } } printf("-1"); return -1; } int main() { int data[10] = { 1,2,3,4,5,6,7,8,9,0 }; int length = sizeof(data)/sizeof(data[0]); search(data, 9, length); return 0; } ``` 该代码通过在`main`函数中计算数组长度并作为参数传递给`search`函数,或者使用宏定义,解决了在子函数获取数组长度的问题 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值