相关疑难解决方法(0)

如何找到'sizeof'(指向数组的指针)?

首先,这里是一些代码:

int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法找出ptr指向的数组的大小(而不是仅仅给出它的大小,在32位系统上是4个字节)?

c arrays pointers sizeof

288
推荐指数
8
解决办法
35万
查看次数

C中是否有一个标准函数可以返回数组的长度?

C中是否有一个标准函数可以返回数组的长度?

c arrays

24
推荐指数
3
解决办法
8654
查看次数

不使用宏编译时间sizeof_array

这只是过去几天困扰我的事情,我认为不可能解决,但我之前看过模板魔术.

开始:

为了获得标准C++数组中的元素数量,我可以使用宏(1)或类型安全的内联函数(2):

(1)

#define sizeof_array(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))
Run Code Online (Sandbox Code Playgroud)

(2)

template <typename T>
size_t sizeof_array(const T& ARRAY){
    return (sizeof(ARRAY)/sizeof(ARRAY[0]));
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,第一个问题是成为一个宏(目前我认为是一个问题),而另一个问题是在编译时无法获得数组的大小; 即我不能写:

enum ENUM{N=sizeof_array(ARRAY)};
Run Code Online (Sandbox Code Playgroud)

要么

BOOST_STATIC_ASSERT(sizeof_array(ARRAY)==10);// Assuming the size 10..
Run Code Online (Sandbox Code Playgroud)

有谁知道这是否可以解决?

更新:

这个问题是在引入constexpr之前创建的.现在你可以简单地使用:

template <typename T>
constexpr auto sizeof_array(const T& iarray) {
    return (sizeof(iarray) / sizeof(iarray[0]));
}
Run Code Online (Sandbox Code Playgroud)

c++ puzzle metaprogramming

16
推荐指数
5
解决办法
1万
查看次数

为什么sizeof(intArray)/ sizeof(int)给出不同的值?

可能重复:
C++:sizeof表示作为参数传递的数组长度
Sizeof数组

#include "stdafx.h"
#include <iostream>

using namespace std;

void PrintArrayLength(int arr[])
{
    cout << "Function Array length is: " << sizeof(arr)/sizeof(int) << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int arr[] = {1, 2, 3};

    cout << "Array length is: " << sizeof(arr)/sizeof(int) << endl; // print 3

    PrintArrayLength(arr); // print 1
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么一个地方sizeof(arr)/ sizeof(int)给出值1而另一个地方给出值3?

c++

2
推荐指数
1
解决办法
741
查看次数

标签 统计

arrays ×2

c ×2

c++ ×2

metaprogramming ×1

pointers ×1

puzzle ×1

sizeof ×1