在C ++中将函数作为参数传递时出错

Vtik

当我尝试将一个函数作为参数传递给另一个函数时,我在C ++中遇到了这个奇怪的事情。这里的问题是它可以工作,但不能给我预期的结果。这是我的代码(msvc2013):

#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */
#include <iostream>

typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
using namespace std;

#include "stdafx.h"

uint32_t random_color()
{
    uint8_t r = rand() % 255;
    uint8_t g = rand() % 255;
    uint8_t b = rand() % 255;
    uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);

    return rgb;
}

void print_rgb(uint32_t(*color_generator)() = &random_color)
{
    std::cout << color_generator << std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    for (int i = 0; i < 5; i++)
    {
        srand(time(NULL));
        print_rgb();
    }
    system("PAUSE");
    return 0;
}

这段代码的目的更加复杂,但这只是一个最小的例子。

问题:虽然您看到了,但是srand(time(NULL));为了rand()更改值,它并没有!

因此,在5次中,我获得了相同的价值! 输出

有什么原因吗?我想念什么吗?

斯拉瓦

看起来您正在打印指向函数的指针的值,您的代码应为:

std::cout << color_generator() << std::endl;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C中将2维数组作为函数参数传递时出错

在C ++中将函数作为参数传递

在C函数中将指针作为参数传递

在 C++ 中将函数作为参数传递

在C函数中将结构作为参数传递

E0312、C2664 尝试将矢量对象作为函数参数传递时出错

在C ++中将void函数作为参数传递给double函数

在objective-c中将swift函数作为参数传递

如何在C ++中将函数作为参数传递?

如何在C中将函数作为参数传递?

在rcpp中将用户创建的c ++函数作为参数传递

如何在Rcpp / C ++中将函数作为参数传递?

在C ++中将子向量作为函数参数传递

无法在C中将结构指针作为函数参数传递

在C中将struct传递给函数时出错

错误:在函数中将struct作为参数传递时,表达式在c中必须具有struct或union类型

C-在可变参数函数中将多个函数地址作为参数传递

在C / C ++中将指针作为参数传递?

在bash中将数组作为函数参数传递时出错

在类中将函数作为参数传递时出错

作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

如何在C ++中将函数作为参数传递给函数宏

为什么不能在C ++中将函数求值作为构造函数参数传递?

在C ++中将int作为布尔参数传递

在C中将多维数组作为参数传递

在 C# 中将按钮作为参数传递

在C ++中将功能模板作为参数传递

在C#中将+ =或-=作为参数传递

在C中将数组作为参数传递